如何解决这个未声明的标识符

luc*_*kdl 0 c++ linker extern

我的项目中出现了未声明的标识符错误(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':找不到标识符

这里有什么问题,如何解决?

Sam*_*tep 5

你有一个循环定义问题.请注意,foo.h包含bar.h , bar.h包含foo.h. 这不起作用,因为这意味着在第一个完成其他定义之前,两个定义都不能完成.您可以真正解决此问题的唯一方法是更改​​您的结构,以便其中一个标题不是#include另一个标题.