我的项目中出现了未声明的标识符错误(vs2013上的C2065),我设法在下面的示例代码中复制了该问题:
foo.h中:
#pragma once
#include "bar.h"
class Foo
{
public:
inline void doStuff() { someFunction(); }
};
Run Code Online (Sandbox Code Playgroud)
bar.h:
#pragma once
#include <map>
#include "foo.h"
extern std::map<const char*, Foo> myMap;
void someFunction();
Run Code Online (Sandbox Code Playgroud)
bar.cpp:
#include "bar.h"
std::map<const char*, Foo> myMap;
void someFunction()
{
}
Run Code Online (Sandbox Code Playgroud)
main.cpp中:
#include "foo.h"
int main()
{
Foo foo;
foo.doStuff();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在Visual Studio Express 2013上构建时,它会出现以下错误:
错误C2065:'Foo':未声明的标识符
错误C2923:'std :: map':'Foo'不是参数'_Ty'的有效模板类型参数
错误C3861:'someFunction':找不到标识符
这里有什么问题,如何解决?
你有一个循环定义问题.请注意,foo.h包含bar.h , bar.h包含foo.h. 这不起作用,因为这意味着在第一个完成其他定义之前,两个定义都不能完成.您可以真正解决此问题的唯一方法是更改您的结构,以便其中一个标题不是#include另一个标题.
| 归档时间: |
|
| 查看次数: |
2313 次 |
| 最近记录: |