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


Anmelden zum Antworten