所有私有方法上的 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:未解析的外部符号 WINAPI [重复]
从 C++ 连接 MySQL:错误 LNK2001:未解析的外部符号 [重复]