Qt 4.8:使用槽和信号对vtable的未定义引用

时间:2013-12-26 05:06:53

标签: c++ qt signals-slots qmake moc

我在Qt v4.8.5中的插槽和信号代码出现了一个奇怪的错误。每当我将QObject包含在插槽中时

class dnEventHandler : public QObject
{
    Q_OBJECT
public slots:
    void LaunchProjectCreator();
};

我得到一些奇怪的错误:

Main.cc:(.text.startup+0x4b): undefined reference to `vtable for dnEventHandler'
Main.cc:(.text.startup+0x19e): undefined reference to `vtable for dnEventHandler'
Main.cc:(.text.startup+0x20d): undefined reference to `vtable for dnEventHandler'

我认为这很奇怪,因为似乎错误与.pro中的标题有关,但我已经在.pro中的包含路径中使用了标题,如下所示:< / p>

INCLUDEPATH += ../../include/

为什么我的包含路径中的标题会得到这样的未定义引用?

2 个答案:

答案 0 :(得分:1)

这个问题有两种解决方案,但是您的具体问题可能归结为将查询头文件放入HEADERS变量的相同根本原因。完成此操作后,您可能需要确保重新发出qmake命令。

基于你的问题,由于我们既没有看到你的构建系统,也没有看到源文件,所以它不能完全独立完成这项工作,但是:

1)使构建系统解决问题。这开始看起来更简单。

2)在源文件的末尾使用#include "foo.moc"来避免它。一旦生成moc文件,该版本将以相同的方式与任何构建系统一起使用。

答案 1 :(得分:0)

原来 可以在.pro中手动指定所有带标题的标题:

HEADERS += yourHeader.h

Qt必须使用它来生成MOC(元对象代码)文件。