错误LNK2019:在多个项目解决方案中无法解析的外部符号

error LNK2019: unresolved external symbol in a multiple projects solution

本文关键字:符号 外部 解决方案 LNK2019 项目 错误      更新时间:2023-10-16

我有一个视觉工作室解决方案与多个项目。其中之一,"MyProject"是一个静态库(.lib)。该项目在众多的班级中,有"A"answers"B"两个班级。

A.h:

#pragma once
class A
{
public:
    void foo();
};

A.cpp:

#include A.h
void A::foo(){
        //do something
}

B.h:

#pragma once
class B
{
public:
    void bar();
};

B.cpp:

#include B.h
#include A.h
void B::bar(){
        A a;
        a.foo();
}

没有编译错误,我得到链接错误:

OtherProject.lib(b.b obj):错误LNK2019:未解析的外部符号"public: void __thiscall答::foo(空白)"(?foo@A@@QAE_NXZ)在函数"public: void"中引用__thiscall B:酒吧(空白)"(? bar@B@@QAEXXZ)

一切似乎都很好。我确实看到了a.p p的编译过程。仅构建或链接项目"MyProject"是可以的。但是当试图构建整个解决方案时,我得到了错误。

谢谢!

结果表明,有另一个项目OtherProject包含B类并使用其功能bar()。我没有很好地阅读错误,没有注意到链接错误发生在另一个项目中。我所要做的就是在OtherProject中包含A.cpp

这个方法的实现在a.p中被注释掉:

void A::foo(){
        //do something
}

或者A.cpp不包含在项目的构建中。在解决方案资源管理器中右键单击a.p,并选择Properties,以查看它是否被排除在构建之外。当您构建时,您是否看到如下内容:

1>Compiling...
1>A.cpp

我把这段代码输入到我的Visual Studio中,它工作得很好

另一个解决方案是合并。h和。cpp文件。这样你就能得到这个问题的解。在我的例子中,我喜欢这样,它工作得很好

相关文章: