Я новичок в 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
, но я не совсем уверен. Есть идеи?
Вы не используете мета-объектный компилятор, иначе. Мок, правильно.
У вас есть QObject в источнике, в отличие от заголовка, поэтому вместо включения заголовка в HEADERS
переменная для qmake, вам нужно будет включить сгенерированный файл 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
Других решений пока нет …