ソースを見つけられないように見える未解決の外部シンボル エラーがあります。Engine のインスタンスが外部リンケージ ( ) を持つように宣言することにより、Engine クラスへのグローバル アクセスを許可しようとしていますg_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
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();
}
EDIT : コンストラクターにコメントを追加
マップ.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.