Fehlermeldungen lesen
Fehler gehören beim Programmieren dazu. Auch erfahrene Programmierer machen sie jeden Tag. Wichtig ist, sie schnell zu finden und zu beheben, und dabei helfen dir Fehlermeldungen.
Bevor ein Programm läuft, geht der Compiler es ganz durch. Findet er einen Fehler, führt er das Programm gar nicht aus, auch nicht die Zeilen vor dem Fehler, und zeigt in der Ausgabe eine rote Fehlermeldung an. In diesem Programm fehlt zum Beispiel in Zeile 4 ein Semikolon:
#include <iostream>
int main() {
std::cout << "Hallo!" << std::endl
std::cout << "Wie geht's?" << std::endl;
}Clang, der Compiler, der auf dieser Seite die Programme kompiliert, gibt aus:
main.cpp:4:39: error: expected ';' after expression
4 | std::cout << "Hallo!" << std::endl
| ^
| ;
1 error generated.Am wichtigsten ist die erste Zeile der Meldung. Lies sie von links:
main.cppist der Name der Datei mit dem Programm, also der Datei im Editor.4ist die Nummer der Zeile mit dem Fehler. Die Zeilennummern siehst du links im Editor.39ist die Nummer der Spalte: das wievielte Zeichen in der Zeile es ist.error:sagt, dass es sich um einen Fehler handelt. Danach folgt eine Beschreibung:expected ';' after expressionbedeutet, dass der Compiler nach dem Ausdruck ein;erwartet hat.
Darunter zeigt Clang die Zeile mit dem Fehler und markiert die Stelle mit ^. Oft schreibt es sogar dazu, was dort fehlt, hier ;. Die letzte Zeile, 1 error generated., sagt nur, wie viele Fehler Clang gefunden hat.
Die Meldung sieht etwas anders aus, wenn das Anführungszeichen am Ende eines Textes fehlt:
#include <iostream>
int main() {
std::cout << "Hallo! << std::endl;
}main.cpp:4:18: warning: missing terminating '"' character [-Winvalid-pp-token]
4 | std::cout << "Hallo! << std::endl;
| ^
main.cpp:4:18: error: expected expression
1 warning and 1 error generated.Eine mit warning: markierte Zeile ist eine Warnung: Der Compiler weist auf etwas hin, das verdächtig aussieht. Hier ist sie sogar nützlicher als der Fehler selbst. missing terminating '"' character bedeutet, dass das schließende Anführungszeichen fehlt, und ^ zeigt auf das Anführungszeichen, das keinen Partner hat. Ohne es kann der Compiler nicht erkennen, wo der Text endet, und findet nach << nichts Sinnvolles: expected expression heißt, dass er einen Ausdruck erwartet hat, etwas zum Ausgeben.
Manchmal verursacht ein Fehler mehrere Meldungen. Fehlt zum Beispiel die Zeile #include <iostream>, bekommst du für jedes std:: im Programm den Fehler use of undeclared identifier 'std' (ein Name, den der Compiler nicht kennt). Deshalb solltest du immer den ersten Fehler zuerst beheben und das Programm erneut ausführen. Die anderen Meldungen verschwinden oft, weil sie nur vom ersten verursacht wurden. Und umgekehrt: Nach einer Korrektur kann ein neuer Fehler auftauchen, den der Compiler vorher nicht gefunden hat.
Weitere häufige Fehler und ihre Meldungen:
- Vor
coutfehltstd:::use of undeclared identifier 'cout'; did you mean 'std::cout'?Clang schlägt sogar vor, was du wahrscheinlich gemeint hast. - Ein Großbuchstabe statt eines Kleinbuchstabens:
no member named 'Cout' in namespace 'std'; did you mean 'cout'? - Die
}am Ende des Programms fehlt:expected '}'
Zeilen mit note: sind nur zusätzliche Hinweise. Sie zeigen oft auf Dateien der Standardbibliothek, du musst sie also nicht beachten.
So schreibst du es:
Anweisungen
- 1
Das Programm im Editor hat zwei Fehler: Ein Semikolon und ein Anführungszeichen fehlen. Führe es aus und lies die erste Fehlermeldung: In welcher Zeile und in welcher Spalte steht der Fehler, und was ist falsch? Behebe den Fehler und führe das Programm erneut aus. Wiederhole das, bis das Programm ausgibt:
Tic-Tac-Toe-Turnier Wann: Samstag um 10:00 Uhr Wo: Klassenzimmer 2B