我有一个未解决的外部符号错误,我似乎无法找到源。我试图通过将 Engine 的实例声明为具有外部链接 ( g_engine
) 来提供对 Engine 类的全局访问。我的 main.cpp 文件是唯一定义此实例的文件(据我所知)。这很好用。g_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
主.cpp:
#include "engine.hpp"
Engine g_engine; // Defined only here
int main()
{
g_engine.run();
return 0;
}
地图.hpp:
// Only includes standard headers
class Map
{
void some_func();
}
编辑:向构造函数添加注释
地图.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
引擎.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.