这个问题让我陷入了疯狂的追逐,所以我想修改它来直接了解事实。
我正在处理一组像这样安排的课程
//third party .h file
class ChildX : public ParentY {
public:
OtherClass member;
}
//third party .h file
class ParentY {
protected:
ParentY();
//other public attributes
}
//third party .cpp file
ParentY::ParentY {
}
每当我尝试编译其中一个类时,我都会收到一条无用的错误消息
Undefined reference to 'ParentY::ParentY()' in function 'SomeClass::DoX()';
错误完全没有用,但我最终确定问题是由CPP文件中的构造函数引起的。显然,包含ChildX.h文件的代码不会与ParentY.cpp文件中隐藏的构造函数链接。解决方案(例如https://ubuntuforums.org/showthread.php?t=1966081)似乎要求在运行其余构建之前编译有问题的cpp文件。
所以现在我已经弄清楚错误是什么以及如何解决它,我只需要弄清楚如何在QtCreator中做到这一点
答案 0 :(得分:0)
解决方案分为三个部分。
分别将cpp文件编译为.o对象。我不打算谈论这一步,因为我能够为我正在使用的第三方库使用预编译的.o文件。显然他们也知道这个问题并为他们所有的课程准备了.o文件。
根据How to add object files to a project in Qt的建议,将.o文件添加到Qt的.pro文件的LIBS部分。
您编译的.o文件与其他.o对象之间可能存在其他依赖关系。如果你可以在一个地方获得所有这些,你可以在.pro文件中使用一行获得所有依赖项。
LIBS + = / path / to / object / files