如何修复错误LNK2001和LNK2019

How to fix error LNK2001 & LNK2019

本文关键字:LNK2019 LNK2001 错误 何修复      更新时间:2023-10-16

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> ProjectAAA.obj:错误LNK2019:未解析的外部符号"public:__thiscall APP::X::ClassEvent::ClassEvent(unsigned int)"(??0ClassEvent@X@应用程序@@QAE@I@Z) 在函数"private:class std::vector,class std::allocater>>__thiscall APP::X::ProjectAAA::GenerateEvents(class std:::map>>const&)"(?GenerateEvents@ProjectAAA@X@APP@@AAE?AV$vector@V$shared_ptr@VClassEvent@X@APP@@@提升@@V$allocator@V$shared_ptr@VClassEvent@X@APP@@@boost@@std@@std@@ABV$map@VDate@应用程序@@IUEventAttributesMapCompare@ProjectAAA@X@2@V$allocator@U$成对@$$CBVDate@APP@@我@std@@@std@@@5@@Z)

现在我已经完全隔离了错误:

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

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

您可以通过打开其中一个文件的属性,选择"C/C++"->"输出文件"->"对象文件名"并将其更改为一些不冲突的值(如ClassEvent2.obj)来解决此问题。

我相信这是VisualStudio中的一个错误,但在最近的4个版本中还没有解决,因此很可能会一直存在。

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

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

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