C ++中非常奇怪的链接器错误

时间:2014-07-06 13:06:46

标签: c++ visual-studio linker sdl unresolved-external

当我尝试在Visual Studio Express 2013中构建我的C ++ + SDL项目时,出现以下错误:

1>Main.obj : error LNK2019: unresolved external symbol "public: void __thiscall Game::run(void)" (?run@Game@@QAEXXZ) referenced in function _SDL_main

在Main我有#include "TestGame.h"

TestGame.h包含

 #include "Game.h"

struct TestGame : Game{ ... }

Game.h包含

struct Game{
    ...
    void run();
}

void Game::runGame.cpp中定义,其中还包含Game.h

然而我仍然收到错误。 (另外11人喜欢它)

我已经阅读了What is an undefined reference/unresolved external symbol error and how do I fix it?的全部内容,并没有提出任何建议似乎解决了我的问题。因此,我不相信我的问题是它的重复。

可以在https://github.com/xGeovanni/CPP-Game-Libs

找到完整的代码

我很乐意回答任何必要的问题来帮助我解决这个问题。谢谢。

编辑:删除VC ++项目并将所有源文件添加到新文件后,此问题停止发生。

1 个答案:

答案 0 :(得分:2)

  <ClInclude Include="Game.cpp" />

这就是为什么Game.cpp不会被编译,它的标签只适用于#included文件。项目文件中只有三个文件具有所需的<ClCompile>标记(Main.cpp,Player.cpp,TestGame.cpp)。

非常不清楚这是怎么发生的,一般不要手动编辑.vcxproj文件。要解决此问题,请右键单击解决方案资源管理器中的Game.cpp文件,属性,常规。更改&#34;项目类型&#34;属于&#34; C / C ++ Header&#34;到&#34; C / C ++编译器&#34;。对具有错误标记的其他.cpp文件重复此操作。您可以轻松地告诉哪些,当您右键单击它们时,它们会禁用“编译”菜单项。