Compiler- und Linkfehler
Compiler- und Linkerfehler nachschlagen#
Nachschlagen · Lektion 59 von 60
Voraussetzungen: Buildablauf. Lernziel: Du ordnest eine Meldung einer wahrscheinlichen Ursache zu.
Die folgenden Texte sind typische Meldungsfragmente. Der genaue Wortlaut hängt von Compiler, Version, Spracheinstellung und Kontext ab. Ein Diagnosetext beschreibt, was das Werkzeug an einer Stelle nicht verarbeiten konnte; die Ursache kann davor liegen.
Meldung oder Fragment | Wahrscheinliche Ursache | Nächster sinnvoller Schritt |
|---|---|---|
expected ';' | Semikolon fehlt | Vorherige Anweisung prüfen |
expected '}' | Block nicht geschlossen | Klammerpaare und Funktionsende prüfen |
missing terminating " character | Stringliteral nicht geschlossen | Anführungszeichen und Escapes prüfen |
unterminated comment | /* ohne passendes */ | Kommentargrenzen prüfen |
was not declared in this scope | Name unbekannt oder nicht sichtbar | Schreibweise, std::, Deklaration und Scope prüfen |
No such file or directory bei Include | Header nicht gefunden | Schreibweise, Installation und Include-Suchpfade prüfen |
redefinition | Definition mehrfach im selben relevanten Bereich | Doppelte Definition und Include Guard prüfen |
narrowing conversion | Initialisierung könnte Informationen verlieren | Fachtyp und erlaubten Bereich prüfen |
assignment of read-only | Änderung über const verboten | Absicht klären, nicht blind const entfernen |
no matching function | Keine passende Parameterliste | Argumenttypen und Anzahl vergleichen |
ambiguous | Mehrere gleich gute Kandidaten | Überladungen und implizite Umwandlungen prüfen |
use of deleted function | Eine Operation wurde ausdrücklich verboten | Etwa unerlaubte Kopie eines unique_ptr vermeiden |
control reaches end of non-void function | Rückgabewert auf einem Pfad fehlt | Alle normalen Funktionswege prüfen |
does not override | Virtuelle Signatur passt nicht | Parameter, Rückgabetyp und const prüfen |
undefined reference, LNK2019 | Definition fehlt beim Linken | Implementierungsdatei oder Bibliothek in den Build aufnehmen |
multiple definition, LNK2005 | Symbol mehrfach beim Linken definiert | ODR und unzulässige Headerdefinitionen prüfen |
main must return int | Nicht standardgemäßer Rückgabetyp | Für Kursprogramme int main() verwenden |
Fehlermeldungen sinnvoll eingrenzen#
Lies zuerst die erste konkrete Meldung im Buildlog. Der Buildlog ist die protokollierte Ausgabe des Bauvorgangs. Eine fehlende Klammer kann dazu führen, dass der Compiler nachfolgende Funktionen im falschen Kontext sieht und zahlreiche weitere Fehler meldet.
Behebe einen klaren Anfangsfehler und baue erneut. Erzwinge keinen Cast, nur weil damit eine Meldung verschwindet. Er könnte einen Typfehler in einen Laufzeitfehler verwandeln.
Drei Meldungen außerhalb der Übersetzung#
Segmentation fault oder eine Zugriffsverletzung entsteht während der Ausführung. Untersuche Zeiger, Grenzen und Lebensdauer. std::out_of_range kann von einer geprüften Containeroperation stammen; prüfe den Index. Ein nicht gefundener Befehl wie g++ stammt von der Shell und verweist auf die Installation oder PATH, nicht auf dein Semikolon.
Übung#
Ein Header deklariert double rechnen(double);. Der Build meldet beim Aufruf undefined reference. Welche Datei prüfst du zuerst?
Lösung
Die Datei mit der passenden Definition und ihre Aufnahme in das Buildziel. Prüfe außerdem, ob Parametertypen und Namensraum der Definition zur Deklaration passen. Eine ähnlich benannte Funktion ist nicht automatisch dasselbe Symbol.
Weiterlernen#
Zurück: C++-Glossar: Fachbegriffe verständlich erklärt · Kursübersicht · Weiter: Gute C++-Gewohnheiten im Alltag
Kommentare 0
Kommentare sind für diese Seite deaktiviert.