我是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
添加库,但我不太确定。有什么想法吗?
答案 0 :(得分:4)
您没有使用元对象编译器,也就是说。 moc,恰当。
源代码中有一个QObject而不是标题,因此不需要将标题包含在qmake的HEADERS
变量中,而是需要在源代码中包含生成的moc文件,如下所示。
请注意,您应该将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