私はちょうど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マクロは正常に動作します。クラスはmain関数と同じファイルで定義されていることに注意してください。
私はWin 7で動作するQtバージョン4.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();
}
あなたは、コードをコンパイルしてくださいするために使用している(S)コマンドを表示します。 – timday
Qt2.7はかなり古いです...あなたは新しいバージョンを試しましたか? 4.8が最新だと思います。 – tmpearce
@tmpearceそれは間違いだった4.7.4 –