我刚开始在Qt框架中编程。下面是一个非常简单的程序:C++/Qt Q_OBJECT宏导致错误
#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();
}
显示您所使用的编译代码,请在命令(或多个)。 – timday 2012-03-29 16:41:53
Qt2.7是相当古老的...你有没有尝试过一个更新的版本?我认为4.8是最新的。 – tmpearce 2012-03-29 16:42:57
@tmpearce这是一个错误,它是4.7.4 – 2012-03-29 16:46:49