未找到构造函数 - 如何将CPP文件添加到Qt构建过程

时间:2017-11-09 18:14:43

标签: c++ qt makefile linker

这个问题让我陷入了疯狂的追逐,所以我想修改它来直接了解事实。

我正在处理一组像这样安排的课程

//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中做到这一点

1 个答案:

答案 0 :(得分:0)

解决方案分为三个部分。

  1. 分别将cpp文件编译为.o对象。我不打算谈论这一步,因为我能够为我正在使用的第三方库使用预编译的.o文件。显然他们也知道这个问题并为他们所有的课程准备了.o文件。

  2. 根据How to add object files to a project in Qt的建议,将.o文件添加到Qt的.pro文件的LIBS部分。

  3. 您编译的.o文件与其他.o对象之间可能存在其他依赖关系。如果你可以在一个地方获得所有这些,你可以在.pro文件中使用一行获得所有依赖项。

    LIBS + = / path / to / object / files