关于所有私有方法的LNK2001

时间:2014-04-04 09:02:52

标签: c++ qt visual-c++ lnk2001

我有一个包含源代码的项目,以及同一解决方案中的TestProject。

TestProject中使用GTest框架的测试文件从主项目获得了#include头文件Composite.h

在第一个GTest的主体中,我实例化Composite.h中声明的Composite类。这一行给出了一个编译错误LNK2001:Composite类的每个私有方法上都有未解析的外部符号。

myTest.cpp文件中的代码看起来像那样

#include "Composite.h"

TEST(testComposite, testCase1)
{
    Composite c;  // error LNK2001
    // my test here;
}

这个实例化出了什么问题?

修改

我链接到包含Composite类中私有方法实现的库。此外,我还尝试#inlcude .cpp来获取此类的源代码。这两种解决方案都无法解决问题。

编辑 - 问题

这可能是具有复合类及其父类(定义了Q_OBJECT)的moc文件的文件夹是看不见的吗?

我尝试在Test Project属性的附加目录中添加包含moc文件的文件夹。这也不起作用。

2 个答案:

答案 0 :(得分:1)

包含与程序的链接无关。您包含的内容包括编译和链接之前的内容。要解决此处显示的问题,您需要链接任何(目标文件,库)包含您提到的私有方法的实现。

答案 1 :(得分:1)

实例化应该没有问题。我假设有一个Composite.cpp包含您丢失或未解析的代码。

您需要将此Composite.cpp添加到项目中或将应用程序链接到包含Composite.cpp的库