3

我有一个未解决的外部符号错误,我似乎无法找到源。我试图通过将 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.
4

1 回答 1

5

未装饰时,?g_engine@@3VEngine@1@Aclass Engine::Engine g_engine。您是否在某处缺少名称空间?

于 2013-08-14T14:35:24.643 回答