所有私有方法上的 LNK2001 [重复]

Posted

技术标签:

【中文标题】所有私有方法上的 LNK2001 [重复]【英文标题】:LNK2001 on all private methods [duplicate] 【发布时间】:2014-04-04 09:02:52 【问题描述】:

我有一个带有源代码的项目,并且在同一解决方案中有一个 TestProject。

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

在第一个 GTest 的主体中,我实例化了在 Composite.h 中声明的 Composite 类。这一行给出了一个编译错误 LNK2001: unresolved external symbol on each private methods of Composite 类。

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

#include "Composite.h"

TEST(testComposite, testCase1)

    Composite c;  // error LNK2001
    // my test here;

这个实例化有什么问题?

编辑

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

编辑——问题

这可能是因为没有看到包含复合类及其父类(定义了Q_OBJECT)的 moc 文件的文件夹吗?

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

【问题讨论】:

#includes 用于编译器。您的错误是链接器错误,这意味着编译器已经完成了它的工作并成功了。您可能没有将目标代码为 Composite 的库包含到您的项目中。有关更多信息,请参阅上面评论中的链接。 【参考方案1】:

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

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

【讨论】:

谢谢,有道理,但是:您提出的解决方案都没有解决它。我链接到 lib,或者我为 .cpp 添加了包含 嗯。您不应包含 cpp,而是将其添加到您的 Visual Studio 项目中。 Alternativley:可能是您的 Composite 类包含您需要链接到项目中的其他代码。 如果您有一些包含 Q_OBJECT 的文件,这需要您在其上运行 moc tool。这将生成一个额外的 .cpp 文件,您需要将其包含到您的项目中。【参考方案2】:

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

【讨论】:

谢谢,有道理,但是:您提出的解决方案都没有解决它。我链接到 lib,或者我为 .cpp 添加了包含

以上是关于所有私有方法上的 LNK2001 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

LNK2001静态属性和方法错误(Qt,C++)[重复]

错误 LNK2001:未解析的外部符号 WINAPI [重复]

从 C++ 连接 MySQL:错误 LNK2001:未解析的外部符号 [重复]

lnk2001的问题

为啥错误 LNK2001:在这种情况下无法解析外部符号? [复制]

错误 LNK2001:未解析的外部符号