Ich habe gerade mit der Programmierung in Qt Framework begonnen. Im Anschluss ist ein sehr einfaches Programm:C++/Qt Q_OBJECT Makro verursacht einen Fehler
#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();
}
Aber ich erhalte folgende Fehlermeldung, wenn ich versuche & laufen, es zu kompilieren:
undefined Verweis auf vtable for MyClass
Aber wenn ich die entfernen: MyClass
In Funktion QObject Makro alles funktioniert gut. Bitte beachten Sie, dass die Klasse in derselben Datei definiert ist wie die Hauptfunktion.
Ich verwende Qt-Version 4.7, auf Win 7 laufen.
Was verursacht dieses Problem?
Update: Ich bekomme den gleichen Fehler, wenn ich meine Klasse in einer separaten Header-Datei definieren. 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";
}
Und dies ist der 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();
}
Zeigen Sie den Befehl (e) Sie bitte den Code zu kompilieren verwenden. – timday
Qt2.7 ist ziemlich alt ... haben Sie eine neuere Version ausprobiert? 4.8 ist das neueste, denke ich. – tmpearce
@tmpearce Es war ein Fehler, es ist 4.7.4 –