Solange wie ich mit Qt entwickle, habe ich den Qt Creator benutzt. Von allen IDEs, welche ich im Laufe der Zeit verwendet habe, ist es wohl eine der modernsten mit einer fabelhaften Integration in das Qt SDK (wobei letzteres nicht anders zu erwarten ist). Leider sind einige der Fehlermeldungen, die von Qt Creator und gcc generiert werden, ziemlich seltsam und in vielen Fällen alles andere als leicht verständlich. Gerade als Anfänger kosten die Stunden an nerven aufreibendem Debugging und zeitraubendem recherchieren. Darum habe ich hier eine kleine Sammlung von häufigen Fehlern, denen man in der Anfangszeit (und manchmal auch noch später) begegnen wird. Nicht alle sind reine Qt Produkte, sondern können auch in reinem C++ begegnen, die Mehrheit wird man aber sonst nirgends sehen.

Fangen wir an. Ich werde immer nur den wichtigsten Teil der Nachricht aufschreiben:

multiple types in one declaration

Du hast einen Strichpunkt am Ende einer Class, eines Structs oder eines Enums vergessen. Das passierte mit großer Wahrscheinlichkeit nicht einmal in der Datei in welcher die Fehlermeldung auftritt, sondern in einer der eingebunden.

 passing 'const ...' as 'this' argument of '...& .::operator=(const ...&)' discards qualifiers

Es gibt zwei Möglichkeiten. Erstens du hast versucht einer mit const definierten Variable einen Wert zuzufügen  oder die andere Möglichkeit ist, dass die Memberfunktion in der die Wertzuweisung stattfindet selbst const ist.

 static member function ‘...’ cannot have cv-qualifier

Statische Memberfunktionen können nicht const sein.

 The procedure entry point ... could not be located in the dynamic link library ...

Eine Library scheint zu fehlen. Prüfe nach ob alle benötigten Librarys in der richtigen Version (Debug/Release) im gleichen Ordner wie die Executable sind.

 undefined reference to 'vtable for ...'

Der erste Fehler der mir im Qt Create begegnet ist und bis heute der am Meisten gefürchtete. Er hat mich vermutlich Stunden, wenn nicht gar Tage meines Lebens gekostet. Zur Behebung versucht folgende Tips:

  • Das Projekt cleanen, qmake ausführen und dann einen neuen Build erstellen.
  •  Jede Klasse, die sich von QObject ableitet, muss in seperate Header und Source Dateien aufgeteilt werden. Das ist zwar allgemein bei C++ ratsam, aber gilt ins besonders bei der Arbeit mit Qt bzw. konkret mit Moc.
  • Klassen, welche Interface darstellen, müssen komplett virtual sein. Das heißt jede Memberfunktion muss “virtual” und “= 0” verwenden.

Zum Schluss noch ein paar kurze Hinweise:

“connect” schlägt aus irgend einem Grund fehl.

Beide Objekte, welche an die connect-Funktion übergeben werden, müssen Pointer sein und sich von QObject ableiten.

Header und Source Dateien verschwinden plötzlich aus der IDE.

Prüfe die .pro Datei. Mit großer Wahrscheinlichkeit hat sie einen Fehler. Mögliche Gründe sind Backslashs, welche sich am Ende von Variablen befinden. Sie sind nur innerhalb derselben erlaubt.

Wer ähnliche Tips oder Korrekturen und/oder bessere Erklärungen für die obigen Probleme hat, darf sie gerne in den Kommentaren mitteilen.

Advertisements