Partager via


Erreur du compilateur C2065

Mise à jour : novembre 2007

Message d'erreur

'identificateur' : identificateur non déclaré
'identifier' : undeclared identifier

Le type d'une variable doit être spécifié dans une déclaration avant son utilisation. Les paramètres utilisés par une fonction doivent être spécifiés dans une déclaration ou un prototype avant utilisation de la fonction.

Causes possibles :

  1. Vous compilez avec une version debug du runtime C, déclarez une variable d'itérateur de la bibliothèque C++ standard dans une boucle for, puis essayez d'utiliser cette variable d'itérateur en dehors de la portée de la boucle for. La compilation du code de la bibliothèque C++ standard avec une version debug du runtime C implique /Zc:forScope. Pour plus d'informations, consultez Prise en charge des itérateurs de débogage.

  2. Vous appelez peut-être une fonction dans un fichier d'en-tête du Kit de développement SDK non prise en charge actuellement dans votre environnement de génération.

  3. Omission de certains fichiers include, en particulier si vous définissez VC_EXTRALEAN, WIN32_LEAN_AND_MEAN ou WIN32_EXTRA_LEAN. Ces symboles excluent certains fichiers d'en-tête de windows.h et afxv_w32.h pour accélérer les compilations. (Consultez les fichiers windows.h et afxv_w32.h pour une description à jour de ces exclusions).

  4. Faute d'orthographe sur le nom de l'identificateur.

  5. L'identificateur utilise une combinaison erronée de majuscules et minuscules.

  6. Guillemets de fermeture manquants après une constante chaîne.

  7. Portée d'espace de noms incorrecte. Pour résoudre les fonctions de bibliothèque standard et opérateurs C++ ANSI, par exemple, vous devez spécifier l'espace de noms std avec la directive using. L'exemple ci-dessous donne un échec de compilation parce que la directive using est en commentaire et que cout est défini dans l'espace de noms std :

Exemple

L'exemple suivant génère l'erreur C2065 :

// 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;
}

Lors de l'appel d'une fonction générique, si l'argument de type prévu ne peut pas être déduit des paramètres utilisés, le compilateur signale une erreur. Pour plus d'informations, consultez Generic Functions.

L'exemple suivant génère l'erreur C2065 :

// 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
}

Cette erreur peut également être due à la mise en conformité du compilateur pour Visual C++ 2005 : vérification des paramètres des attributs Visual C++. Pour plus d'informations, consultez Modifications avec rupture dans le compilateur Visual C++ 2005.

L'exemple suivant génère l'erreur C2065 :

// 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;
};