error C3646: “name”: 未知重写说明符
error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
有一个例子:
文件1:ReadData.h
#pragma once
int fun(int i, int j);
文件2:ReadData.cpp
#include <iostream>
#include "ReadData.h"
using namespace std;
int fun(int i, int j)
{
return i + j;
}
文件3:run_main.cpp
#include <iostream>
#include "ReadData.h"
using namespace std;
int main()
{
cout << "输出结果如下:" << endl;
cout << fun(3, 4) << endl;
return 0;
}
运行一下,一切都很正常。
但是,当我在头文件1中添加一个结构体时
文件1修改:ReadData.h
#pragma once
struct _STU
{
string name;
int age;
};
int fun(int i, int j);
运行时就出错了。。
当我把文件2和3的头文件调整一下后
文件2:ReadData.cpp
#include <iostream>
using namespace std; //这两行换下顺序
#include "ReadData.h" //这两行换下顺序
int fun(int i, int j)
{
return i + j;
}
文件3:run_main.cpp
#include <iostream>
using namespace std; //这两行换下顺序
#include "ReadData.h" //这两行换下顺序
int main()
{
cout << "输出结果如下:" << endl;
cout << fun(3, 4) << endl;
return 0;
}
又可以正常运行了。
要理解添加头文件其实是把头文件的内容展开放在头文件include的地方
这里头文件h中添加了一个结构体,结构体中用到了string类型
而这个类型需要std支持,当头文件在#include <iostream>之前时,是找不到string类型的
所以报错
假如头文件在#include <iostream>之后,using namespace std;之前的话,上述代码也会报错,可以将string --> std::string这样修改,不会报错了就。
一定要注意加载的先后顺序