2

我是 Qt 的新手。我正在尝试编译如下所示的小代码片段:

#include<QtCore/QtCore>
#include<QtCore/QObject>

class Test:public QObject
{
  Q_OBJECT
  public:
  Test(){qDebug()<<"CTOR";}
};

int main()
{
Test t;
return 0;
}

我正在尝试使用以下命令通过命令行运行它:

g++ -o signalTest.exe -l QtCore signalTest.cpp

但是我收到以下错误:

undefined reference to vtable for Test

我想我需要包含库QObject,但我不太确定。有任何想法吗?

4

1 回答 1

5

您没有使用元对象编译器,也就是。moc,正确的。

您在源代码中有一个 QObject 而不是标头,因此HEADERS您需要在源代码中包含生成的 moc 文件,而不是将标头包含在 qmake 的变量中,如下所示。

请注意,由于它提供的属性、信号和插槽,您通常应该将 Q_OBJECT 宏添加到您的 Q_OBJECT 中。这不是解决此问题的绝对必要条件,但如果您意识到这一点会更好。

主文件

#include<QtCore/QtCore>
#include<QtCore/QObject>

class Test:public QObject
{
  Q_OBJECT
  public:
  Test(){qDebug()<<"CTOR";}
};

#include "main.moc" // <----- This will make it work

int main()
{
Test t;
return 0;
}

主程序

TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp

构建并运行

qmake && make
于 2014-01-07T12:41:37.820 回答