LNK2001所有私有方法

LNK2001 on all private methods

本文关键字:有方法 LNK2001      更新时间:2023-10-16

我有一个带有源代码的项目,以及同一解决方案中的测试项目。

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

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

myTest.cpp文件中的代码如下所示

#include "Composite.h"
TEST(testComposite, testCase1)
{
    Composite c;  // error LNK2001
    // my test here;
}

这个实例化有什么问题?

编辑

我链接到包含复合类中私有方法实现的库。另外,我尝试 #inlcude 此类源代码的.cpp。任一解决方案都无法解决问题。

编辑 -- 问题

这是否是包含复合类及其父类(已定义Q_OBJECT)的 moc 文件的文件夹是不可见的?

我尝试在测试项目属性的附加目录中添加包含 moc 文件的文件夹。这也行不通。

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

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

包含与

程序的链接无关。您包含的内容对编译很重要,并且发生在链接之前。要解决您在此处显示的问题,您需要链接到包含您提到的私有方法实现的任何内容(对象文件、库)。