C++
VeröffentlichtRevision 1

Compiler- und Linkerfehler nachschlagen

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.

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

Mitwirkende 1

Menschen, deren Änderungen in dieser Seite veröffentlicht wurden.

Kommentare 0

Kommentare sind für diese Seite deaktiviert.