错误LNK2019:多项目解决方案中未解析的外部符号
我有一个包含多个项目的visual studio解决方案。 其中之一,“MyProject”是一个静态库(.lib)。 该项目与许多其他课程一样,有两个class级“A”和“B”。
啊:
#pragma once class A { public: void foo(); };
A.cpp:
#include Ah void A::foo(){ //do something }
BH:
#pragma once class B { public: void bar(); };
B.cpp:
#include Bh #include Ah void B::bar(){ A a; a.foo(); }
没有编译错误我得到链接错误:
OtherProject.lib(B.obj):错误LNK2019:未解析的外部符号“public:void __thiscall A :: foo(void)”(?foo @ A @@ QAE_NXZ)在函数“public:void __thiscall B :: bar”中引用(无效)“(?bar @ B @@ QAEXXZ)
一切似乎都很好。 我确实看到了A.cpp的编译过程。 只建立或链接项目“MyProject”很好。 但是在尝试构建整个解决方案时,我遇到了错误。
谢谢!
事实certificate,还有另一个项目OtherProject
包含B
类并使用它的函数bar()
。 我没有看到错误,并没有注意到在另一个项目中发生链接错误。 我所要做的就是在OtherProject
包含OtherProject
。
在Visual-Studio中,大多数链接问题与忘记添加.cpp
文件有关。
查看所有添加到项目中的实现文件。 然后清理并构建您的项目。
要么在A.cpp中注释掉这个方法的实现:
void A::foo(){ //do something }
或者A.cpp
不包含在项目的构建中。 在解决方案资源管理器中右键单击A.cpp,然后选择“属性”以查看它是否从“生成”中排除。 在构建时,你看到了这个:
1>Compiling... 1>A.cpp
我在Visual Studio中输入了这段代码,效果很好。