-1

我在 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

INCLUDEPATH += ../../include/

为什么我的包含路径中的标头会出现这样的未定义引用?

4

2 回答 2

1

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

根据您的问题,尚不清楚它是否会自行完成这项工作,因为我们既没有看到您的构建系统,也没有看到源文件,但是:

1)让构建系统处理这个问题。乍一看,这看起来更简单。

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

于 2013-12-26T05:11:03.167 回答
0

事实证明,您必须手动指定所有带有插槽的标题.pro

HEADERS += yourHeader.h

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

于 2013-12-26T05:06:53.380 回答