Я только начал программировать в среде Qt.Ниже приведена очень простая программа:
#include <QtCore/QCoreApplication>
#include <QDebug>
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass() {}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
MyClass *c = new MyClass();
return a.exec();
}
Но я получаю следующую ошибку, когда пытаюсь скомпилировать и запустить ее:В функции MyClass
:неопределенная ссылка на vtable for MyClass
Но когда я удаляю макрос QObject , все работает нормально.Обратите внимание, что класс определен в том же файле, что и основная функция.Я использую Qt версии 4.7, работающую на Win 7.Что вызывает эту проблему?
Обновление: Я получаю ту же ошибку, когда определяю свой класс в отдельном заголовочном файле.mytimer.h:
#ifndef MYTIMER_H
#define MYTIMER_H
#include <QtCore>
class MyTimer : public QObject
{
Q_OBJECT
public:
QTimer *timer;
MyTimer();
public slots:
void DisplayMessage();
};
#endif // MYTIMER_H
mytimer.cpp:
#include "mytimer.h"
#include <QtCore>
MyTimer::MyTimer()
{
timer = new QTimer();
connect(timer,SIGNAL(timeout()),this,SLOT(DisplayMessage()));
timer->start(1000);
}
void MyTimer::DisplayMessage()
{
qDebug() << "timed out";
}
И это main.cpp:
#include <QtCore/QCoreApplication>
#include <QDebug>
#include "mytimer.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
MyTimer *mt = new MyTimer();
return a.exec();
}