Freigeben über


Compilerfehler C2065

Aktualisiert: November 2007

Fehlermeldung

'Bezeichner': nicht deklarierter Bezeichner
'identifier' : undeclared identifier

Ein Variablentyp muss vor seiner Verwendung in einer Deklaration angegeben werden. Die von einer Funktion verwendeten Parameter müssen in einer Deklaration oder einem Prototyp angegeben werden, bevor die Funktion verwendet werden kann.

Mögliche Ursachen:

  1. Es wird mit einer Debugversion der C-Laufzeit kompiliert, und dadurch in einer for-Schleife eine Iteratorvariable aus der Standard-C++-Bibliothek deklariert. Anschließend wird versucht, diese Iteratorvariable außerhalb des Gültigkeitsbereichs der for-Schleife zu verwenden. Kompilieren eines Standard-C++-Bibliothekscodes mit einer Debugversion der C-Laufzeit impliziert /Zc:forScope. Weitere Informationen finden Sie unter Debugiterator-Unterstützung.

  2. Sie rufen u. U. eine Funktion in einer SDK-Headerdatei auf, die in der aktuellen Buildumgebung nicht unterstützt wird.

  3. Erforderliche Includedateien fehlen, insbesondere bei der Definition von VC_EXTRALEAN, WIN32_LEAN_AND_MEAN oder WIN32_EXTRA_LEAN. Um die Kompilierung zu beschleunigen, werden durch diese Symbole einige Headerdateien aus windows.h und afxv_w32.h ausgeschlossen. (Überprüfen Sie die Dateien windows.h und afxv_w32.h auf eine aktuelle Beschreibung der ausgeschlossenen Dateien.)

  4. Der Bezeichnername ist falsch geschrieben.

  5. Im Bezeichnernamen wird eine falsche Groß-/Kleinschreibung verwendet.

  6. Hinter einer Zeichenfolgenkonstante fehlt ein schließendes Anführungszeichen.

  7. Falscher Gültigkeitsbereich für den Namespace. Um beispielsweise Funktionen und Operatoren der ANSI C++Standardbibliothek aufzulösen, müssen Sie den std-Namespace mit der using-Direktive angeben. Der folgende Beispielcode wird nicht kompiliert, da die using-Direktive auskommentiert und cout im std-Namespace definiert wird:

Beispiel

Im folgenden Beispiel wird C2065 generiert.

// C2065.cpp
// compile with: /EHsc
// using namespace std;
#include <iostream>
int main() {
   cout << "Hello" << endl;   // C2065

   // try the following line instead
   std::cout << "Hello" << std::endl;
}

Wenn Sie eine generische Funktion aufrufen und das geplante Typargument nicht von den verwendeten Parametern abgeleitet werden kann, wird durch den Compiler ein Fehler ausgegeben. Weitere Informationen finden Sie unter Generic Functions.

Im folgenden Beispiel wird C2065 generiert.

// C2065_b.cpp
// compile with: /clr
generic <typename ItemType>
void G(int i) {}

int main() {
   // global generic function call
   G<T>(10);   // C2065
   G<int>(10);   // OK
}

Dieser Fehler kann auch infolge einer Verbesserung der Compilerkonformität für Visual C++ 2005 ausgegeben werden, und zwar beim Überprüfen der Parameter für Visual C++-Attribute. Weitere Informationen finden Sie unter Wichtige Änderungen im Visual C++ 2005-Compiler.

Im folgenden Beispiel wird C2065 generiert.

// C2065_c.cpp
// compile with: /c
[module(DLL, name=MyLibrary)];   // C2065
// try the following line instead
// [module(dll, name="MyLibrary")];

[export]
struct MyStruct {
   int i;
};