Seite 1 von 1

undefined reference to problem

Verfasst: 30. April 2007 16:02
von a-Ali-YaH
Also ich bekomme beim compilieren immer diese Fehlermeldung
Benutzte die aktuellste qt version. Der Fehler kommt übrigens immer wenn er die Ausführbare Datei erstellt.

Code: Alles auswählen

g++  -o Editor EditorPres.o EditorDlg.o EditorMain.o SearchDlg.o SearchPres.o FileIOAnw.o Messagge.o moc_EditorPres.o moc_EditorDlg.o    -L/usr/lib -lQtGui -lQtCore -lpthread
SearchDlg.o: In function `SearchDlg::SearchDlg()':
SearchDlg.cpp:(.text+0x44): undefined reference to `vtable for SearchDlg'
SearchDlg.cpp:(.text+0x4b): undefined reference to `vtable for SearchDlg'
SearchDlg.o: In function `SearchDlg::SearchDlg()':
SearchDlg.cpp:(.text+0x74): undefined reference to `vtable for SearchDlg'
SearchDlg.cpp:(.text+0x7b): undefined reference to `vtable for SearchDlg'
SearchPres.o: In function `SearchPres::SearchPres()':
SearchPres.cpp:(.text+0x45b): undefined reference to `vtable for SearchPres'
SearchPres.cpp:(.text+0x462): undefined reference to `vtable for SearchPres'
SearchPres.o: In function `SearchPres::SearchPres()':
SearchPres.cpp:(.text+0x54b): undefined reference to `vtable for SearchPres'
SearchPres.cpp:(.text+0x552): undefined reference to `vtable for SearchPres'
collect2: ld gab 1 als Ende-Status zurück
make: *** [Editor] Fehler 1
Da diese Fehlermeldung meist in zusammenhang mit nicht eingebundenen Header-Files ist list ich mal hier die Abhängigkeiten auf:

Es ist ein Editor nach dem 3 Schichtenmodell mit folgenden Dateien:
  • EditorMain.cpp (Die main halt)
  • EditorDlg.cpp, EditorDlg.h (Dialogmanagmentschicht)
  • EditorPres.cpp, EditorPres.h (Presentationsschicht)
  • FileIOAnw.cpp, FileIOAnw.h (Anwendungsschicht)
  • Messagge.cpp, Messagge.h (zum abfangen von Fehlern)
so der funktioniert einwandfrei
auch die Suchfunktion wenn ich sie mit einer eigenen main ausprobiere mit den Dateien funzt:
  • SearchDlg.cpp, SearchDlg.h
  • SearchPres.cpp, SearchPres.h
Allerdings wenn ich jetzt die Suchfunktion in meinen Editor einbaue kommt immer die oben genannte Fehlermeldung.
Die Header sind alle richtig eingebunden an denen kann es nicht liegen.

Auf die search() aus SearchDlg.cpp greif ich folgendermassen zu:

Code: Alles auswählen

// EditorDlg.h
 SearchDlg *dialog;
// EditorDlg.cpp
 dialog = new SearchDlg();
// z.B. hier wird ein string von dieser Funktion zurückgegeben
 QString textToFind = dialog->search();
Weis jemand was ich hier übersehen hab?
Für die die das durchkompilieren möchten hab ich ein Archiv.zip drangehängt. Makefile ist auch schon drin.

gruß

Verfasst: 30. April 2007 16:25
von upsala
Lösch mal das *.pro-File und laß mit

Code: Alles auswählen

qmake -project
ein neues erstellen. Dann funktionierts...

Verfasst: 30. April 2007 16:27
von piXelshooter
ist es absicht dass manche klassen keinen destruktor haben?
Ich krieg dann immer linker error, und wenn er nicht virtuell ist, den von dir angesprochenen fehler

Verfasst: 30. April 2007 16:32
von upsala
Der gcc 4.1.2 meldet keine Fehler wenn der Destruktor nicht vorhanden ist, warum auch, dafür gibt es ja den Default-Destruktor... Und virtuell muß er nur sein, wenn die Klasse virtuelle Funktionen enthält...

Verfasst: 30. April 2007 19:43
von a-Ali-YaH
Super das mit makefile neu erstellen ohne der project datei hat super geklappt!

Danke für die Antwort!
war schon am verzweifeln...

Verfasst: 3. Mai 2007 21:30
von mollitz
in den faq, hätte es auch gestanden :?