[英]C++/Qt Q_OBJECT macro causes an error
我剛剛開始在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宏時,一切正常。 請注意,該類與main函數在同一文件中定義。
我正在使用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();
}
您需要使用qmake編譯它,它將為您的自定義QObject類創建模擬方法。 有關生成moc文件的更多信息,請參見此處 。
由於您的示例不包含頭文件,因此不會對其進行解析,也不會生成moc文件。 您需要在單獨的頭文件中聲明MyClass,並運行moc生成工具。
當您使用QT Creator時,您應該清理項目並在構建菜單中執行qmake。
每當你應用一些更改時首先清理你的項目,然后運行qmake,最后構建你的項目......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.