我有一个未解决的外部符号错误,我似乎无法找到源关闭。
我试图通过声明Engine的实例具有外部链接(g_engine
)来提供对Engine类的全局访问。我的main.cpp文件是唯一定义此实例的文件(据我所知)。这很好。但是当我在另一个源文件中对g_engine
上的方法添加调用时,我收到链接器错误。
engine.hpp:
#include <other_stuff>
#include "Map.hpp"
class Engine
{
public:
std::shared_ptr<Map> map;
void run();
void do_stuff();
// other methods
};
extern Engine g_engine; // Declared in header file
main.cpp中:
#include "engine.hpp"
Engine g_engine; // Defined only here
int main()
{
g_engine.run();
return 0;
}
map.hpp:
// Only includes standard headers
class Map
{
void some_func();
}
编辑:为构造函数添加了评论
map.cpp:
#include "engine.hpp"
Map::Map()
{
// Calls some_func somewhere.
}
void Map::some_func()
{
// g_engine.do_stuff() <--- Uncommenting this line causes a linker error.
}
编辑:添加了Engine.cpp
Engine.cpp:
Engine::Engine()
{
map = std::make_shared<Map>();
}
void Engine::run()
{
// unrelated code
}
注释掉该行,没有给出错误,应用程序运行正常。取消注释该行时,编译很好,但会给出链接器错误:
Error 1 error LNK2001: unresolved external symbol "class Engine g_engine" (?g_engine@@3VEngine@1@A) map.obj.
答案 0 :(得分:3)
未修饰时,?g_engine@@3VEngine@1@A
为class Engine::Engine g_engine
。你在某个地方缺少名称空间吗?