0

我有一个包含多个项目的视觉工作室解决方案。其中之一,“MyProject”是一个静态库 (.lib)。该项目,在许多其他类中有两个类“A”和“B”。

啊:

#pragma once

class A
{
public:
    void foo();
};

A.cpp:

#include A.h

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

乙:

#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.obj) : 错误 LNK2019: 函数“public: void __thiscall B::bar( void)" (?bar@B@@QAEXXZ)

一切似乎都很好。我确实看到了A.cpp的编译过程。仅构建或链接项目“MyProject”就可以了。但是在尝试构建整个解决方案时,我遇到了错误。

谢谢!

4

3 回答 3

1

事实证明,还有另一个项目OtherProject包含 classB并使用它的 function bar()。我没有很好地阅读错误,也没有注意到链接错误发生在另一个项目中。我所要做的就是包含A.cppOtherProject.

于 2013-03-24T08:16:56.900 回答
0

此方法的实现在 A.cpp 中被注释掉:

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

或者A.cpp不包含在项目的构建中。在解决方案资源管理器中右键单击 A.cpp 并选择属性以查看它是否从构建中排除。在构建时,您是否看到:

1>Compiling...
1>A.cpp

我将此代码输入到我的 Visual Studio 中,它运行良好。

于 2013-03-22T22:41:36.310 回答
-1

另一种解决方案是您可以合并 .h 和 .cpp 文件。通过这种方式,您将获得解决方案。就我而言,我确实喜欢这样做并且效果很好

于 2019-05-22T07:00:28.667 回答