如何修复错误LNK2001& LNK2019

时间:2012-10-10 18:27:40

标签: c++ boost

  

ProjectAAA.obj:错误LNK2001:未解析的外部符号“public:__thiscall X :: ClassEvent :: ClassEvent(unsigned int)”(?? 0ClassEvent @ X @@ QAE @ I @ Z)

boost::shared_ptr<ClassEvent> bcfEvent(new ClassEvent((unsigned int) 10));

我已定义ClassEvent::ClassEvent(unsigned int),但不知道如何修复此LINK错误。

任何建议都表示赞赏。

谢谢

更多信息:

1&gt; ProjectAAA.obj:错误LNK2019:未解析的外部符号“public:__thiscall APP :: X :: ClassEvent :: ClassEvent(unsigned int)”(?? 0ClassEvent @ X @ APP @@ QAE @ I @ Z)在函数“private:class std :: vector,class std :: allocator&gt;&gt; __thiscall APP :: X :: ProjectAAA :: GenerateEvents(class std :: map&gt;&gt; const&amp;)”中引用“(?GenerateEvents @ ProjectAAA @ X @ APP @@ AAE?AV?$ @矢量V'$ @的shared_ptr @ VClassEvent @ X APP @@@升压@@ V'$ @分配器V'$ @的shared_ptr @ VClassEvent @ X APP @@@升压@@@ STD @@@ STD @@ ABV?$地图@ VDate @ @@ APP @ IUEventAttributesMapCompare @ ProjectAAA X 2 @ V'$分配器@ U&$ @配对$$ CBVDate @ @@ APP I @ @@性病@std @@@ 5 @@ Z)

现在我完全隔离了错误:

1&gt; ProjectAAA.obj:错误LNK2019:未解析的外部符号“public:__thiscall APP :: X :: ClassEvent :: ClassEvent(unsigned int)”(?? 0ClassEvent @ X @ APP @@ QAE @ I @ Z)在函数“private:void __thiscall APP :: X :: ProjectAAA :: TestGenerateEvents(void)”中引用(?TestGenerateEvents @ ProjectAAA @ X @ APP @@ AAEXXZ)

3 个答案:

答案 0 :(得分:1)

您的问题是解决方案中有两个ClassEvent.cpp个文件。当VC ++编译您的解决方案时,它会在一个目录中输出所有obj文件,从而生成两个ClassEvent.obj文件。无论后来编译哪个cpp都会覆盖前者。这会导致第一个符号丢失并且链接器不可见。

您可以通过打开其中一个文件的属性来解决此问题,选择C / C ++ - &gt;输出文件 - &gt;对象文件名并将其更改为某些非碰撞值(例如ClassEvent2.obj)。

我认为这是Visual Studio中的一个错误,但它在最近4个版本中没有得到解决,因此可能会停留。

答案 1 :(得分:1)

经过多次测试,我找到了解决方案。

团队中有人将项目中的ClassEvent.CPP排除在外!!!

答案 2 :(得分:0)

在我的情况下,在将构建体系结构从 x64 更改为 x86 位后,所有内容都开始正常工作。两天前我遇到了同样的问题。这是因为将我的程序部署到另一台计算机。由于某些原因,我不知道,架构设置已从x86(我写)改为x64。 PS。我使用Visual Studio 2015;