Was sind nicht deklarierte Bezeichnerfehler? Was sind die häufigsten Ursachen und wie kann ich sie beheben?
Beispielhafte Fehlertexte:
Fehler C2065: 'cout' : nicht deklarierter Bezeichner
'cout' undeclared (erste Verwendung in dieser Funktion)
Meistens wird vergessen, die Header-Datei einzubinden, die die Funktionsdeklaration enthält, z.B. gibt dieses Programm einen 'undeclared identifier' Fehler aus:
int main() {
std::cout << "Hello world!" << std::endl;
return 0;
}
Um dies zu beheben, müssen wir die Kopfzeile einfügen:
#include <iostream>
int main() {
std::cout << "Hello world!" << std::endl;
return 0;
}
Wenn Sie den Header geschrieben und korrekt eingebunden haben, kann der Header den falschen include guard enthalten.
Weitere Informationen finden Sie unter http://msdn.microsoft.com/en-us/library/aa229215(v=vs.60).aspx.
Eine weitere häufige Ursache für Anfängerfehler ist die falsche Schreibweise einer Variablen:
int main() {
int aComplicatedName;
AComplicatedName = 1; /* mind the uppercase A */
return 0;
}
Dieser Code würde zum Beispiel einen Fehler auslösen, da Sie std::string
verwenden müssen:
#include <string>
int main() {
std::string s1 = "Hello"; // Correct.
string s2 = "world"; // WRONG - would give error.
}
void f() { g(); }
void g() { }
g
wurde nicht vor seiner ersten Verwendung deklariert. Um dies zu beheben, verschieben Sie entweder die Definition von "g" vor "f":
void g() { }
void f() { g(); }
Oder fügen Sie eine Deklaration von "g" vor "f" ein:
void g(); // declaration
void f() { g(); }
void g() { } // definition
Dies ist Visual Studio-spezifisch. In VS müssen Sie #include "stdafx.h"
vor jedem Code hinzufügen. Code davor wird vom Compiler ignoriert, also wenn Sie dies haben:
#include <iostream>
#include "stdafx.h"
Das #include <iostream>
würde ignoriert werden. Sie müssen es nach unten verschieben:
#include "stdafx.h"
#include <iostream>
Sie können diese Antwort gerne bearbeiten.
In C und C++ müssen alle Namen deklariert werden, bevor sie verwendet werden. Wenn Sie versuchen, den Namen einer Variablen oder einer Funktion zu verwenden, die nicht deklariert wurde, erhalten Sie eine Fehlermeldung "Nicht deklarierter Bezeichner".
Funktionen sind jedoch ein Sonderfall in C (und nur in C), da man sie nicht erst deklarieren muss. Der C-Compiler nimmt an, dass die Funktion mit der Anzahl und dem Typ der Argumente wie im Aufruf existiert. Wenn die tatsächliche Funktionsdefinition nicht damit übereinstimmt, erhalten Sie einen weiteren Fehler. Diesen Sonderfall für Funktionen gibt es in C++ nicht.
Sie beheben diese Art von Fehlern, indem Sie sicherstellen, dass Funktionen und Variablen deklariert werden, bevor sie verwendet werden. Im Fall von printf
müssen Sie die Header-Datei <stdio.h>
(oder <cstdio>
in C++) einbinden.
Für Standardfunktionen empfehle ich Ihnen z.B. diese Referenzseite, und suchen Sie nach den Funktionen, die Sie verwenden wollen. Die Dokumentation für jede Funktion sagt Ihnen, welche Header-Datei Sie benötigen.
Es ist so, als würde man die Funktion verwenden, ohne sie zu deklarieren. <stdio.h> Header-Datei enthält die Funktion printf(). Fügen Sie die Header-Datei in Ihr Programm ein, das ist die Lösung für dieses Problem. Bei einigen benutzerdefinierten Funktionen kann es auch zu Fehlern kommen, wenn sie vor der Verwendung nicht deklariert werden. Wenn sie global verwendet wird, gibt es keine Probleme.