gcc, mal wieder
-
Hi !
Der gcc will mich mal wieder verrückt machen. Ich erhalte folgende Meldung:
tom@debian:~/eigene dateien/Programmieren/qt-kde Programmierung/trainer$ make g++ -c -pipe -Wall -W -O2 -DQT_NO_DEBUG -DQT_SHARED -DQT_THREAD_SUPPORT -I/usr/share/qt3/mkspecs/default -I. -I. -I/usr/include/qt3 -o main.o main.cpp g++ -o trainer AddWordsWindow.o main.o -L/usr/share/qt3/lib -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm main.o(.text+0xb6): In function `main': : undefined reference to `vtable for MyWidget' main.o(.text+0xbd): In function `main': : undefined reference to `vtable for MyWidget' collect2: ld returned 1 exit status make: *** [trainer] Error 1
Der Code von main.cpp sieht wie folgt aus:
class MyWidget : public QWidget { Q_OBJECT AddWordsWindow* addWordsWindow; public: MyWidget(QWidget* parent = null, const char* name = null) : QWidget( parent, name) { QGridLayout* qGrid = new QGridLayout(this, 1, 2); QPushButton* train = new QPushButton("Training beginnen" , this); train->resize(100, 20); qGrid->addWidget(train, 0, 1); QPushButton* newWords = new QPushButton("Neue Wörter einfügen", this); newWords->resize(100, 20); qGrid->addWidget(newWords, 0 , 2); QObject::connect( newWords, SIGNAL(clicked()), this, SLOT( addNewWords() )); } public slots: void startTraining(); void addNewWords(); }; void MyWidget::startTraining() { //TrainingWindow* trainWindow = new TrainingWindow(this); } void MyWidget::addNewWords() { addWordsWindow = new AddWordsWindow(this); this->resize(800, 500); }
Wenn ich QObject::connect und die Slots auskommentiere, dann geht's. Irgendwie hab ich die wohl falsch benutzt.
mfg
tom
-
gemoc't hast du (nich) ?
moc datei.h moc_datei.cpp
und die natürlich auch noch compilieren und linken dann klappts wahrscheinlich auch mit der vtable.
Joe
-
Komisch, ich hab jetzt die Klasse MyWidget aus main.cpp ausgelagert, in eine seperate Header und cpp Datei. Unverständlicherweise hat er jetzt anstandslos kompiliert, obwohl ich wirklich nichts am Code geändert hab !
Hat hier jemand vielleicht ne Erklärung zu ? Darf man in der main.cpp kein Q_OBJECT Makro einbinden ?
mfg
tom