Q_OBJECT verursacht "undefined reference to vtable"
-
Hallo Zusammen.
Ich bin noch relativ neu mit QT.
Mein Progamm funktioniert soweit ganz gut, doch ich bekomme mein Slot nicht ans Laufen.
Wenn ich Q_OBJECT auskommentiere, läuft das Programm zwar, aber der Slot funktioniert nicht. Andernfalls kommt die Fehlermeldung: "undefined reference to vtable: `MyWidget::MyWidget()'Hier ist mein Code. Vielleicht kennt jemand die Lösung.
project.h
class MyWidget :public QWidget { Q_OBJECT; public: MyWidget(void); public slots: void addint(void); private: QPushButton *add; QLineEdit* num1 ; QLineEdit* num2 ; QLineEdit* num3 ; }; #endif
project.cpp
#include <QApplication> #include <QLineEdit> #include <QLabel> #include <QPushButton> #include <QLayout> #include <QString> #include "project.h" #include <QtGui> MyWidget::MyWidget(void) { num1 = new QLineEdit(this); // Text-Feld num1->setText( "0" ); num2 = new QLineEdit(this); // Text-Feld num2->setText( "0" ); num3 = new QLineEdit(this); // Text-Feld num3->setText( "0" ); QPushButton *qpb = new QPushButton("Add",this); // Knopf QLabel *qlab = new QLabel("Result",this); // label QVBoxLayout* layout = new QVBoxLayout(this); layout->addWidget(num1); layout->addWidget(qpb); layout->addWidget(num2); layout->addWidget(qlab); layout->addWidget(num3); // QObject::connect(qpb,SIGNAL(clicked()),this,SLOT(addint())); // button => addint QObject::connect(num1,SIGNAL(returnPressed()),this,SLOT(addint())); // teield => addint QObject::connect(num2,SIGNAL(returnPressed()),this,SLOT(addint())); } void MyWidget::addint() { int v1 = (num1->text()).toInt(); int v2 = (num2->text()).toInt(); int v3 = v1 + v2; QString qs; qs.setNum(v3); num3->setText(qs); }
main.cpp
#include "project.h" int main(int argc,char** argv) { QApplication app(argc,argv); QWidget* mywidget = new MyWidget(); mywidget->resize(120,130); mywidget->show(); return app.exec(); }
Fehlermeldung
In function `MyWidget::MyWidget()': project.cpp:(.text+0x2d): undefined reference to `vtable for MyWidget' project.cpp:(.text+0x34): undefined reference to `vtable for MyWidget' collect2: ld returned 1 exit status
Vielen Dank schönmal im voraus.
-
mit welcher IDE/compiler erstellst du das programm?
header der Klassen, welche das Q_OBJECT makro haben müssen von dem moc progrramm von Qt verarbeitet werden, damit z.b. die Slots in der klasse funktionieren
-
Programm habe ich mit qmake erstellt
-
Makefile habe einfach so erstell:
qmake -project
qmake-qt4 test.pro
qmake-qt4
make
-
Du musst in der *.pro Datei auch die Header mit angeben, damit qmake feststellen kann, ob ein header zusätzlich mit moc "bearbeitet" werden muss.
HEADERS += project.h
oder verwende direkt den qt-creator der nimmt dir das verwalten der pro datei ab.