Que sont les erreurs liées aux identificateurs non déclarés ? Quelles sont les causes courantes et comment puis-je les corriger ?
Exemples de textes d'erreur :
erreur C2065 : 'cout' ; : identifiant non déclaré
.'cout' ; undeclared (première utilisation dans cette fonction)
.Elles proviennent le plus souvent de l'oubli d'inclure le fichier d'en-tête qui contient la déclaration de la fonction, par exemple, ce programme donnera une erreur de type 'undeclared identifier' :
int main() {
std::cout << "Hello world!" << std::endl;
return 0;
}
Pour le corriger, nous devons inclure l'en-tête :
#include <iostream>
int main() {
std::cout << "Hello world!" << std::endl;
return 0;
}
Si vous avez écrit l'en-tête et l'avez inclus correctement, il se peut que l'en-tête contienne le mauvais [include guard][1].
Pour en savoir plus, consultez http://msdn.microsoft.com/en-us/library/aa229215(v=vs.60).aspx.
Une autre source fréquente d’erreur de débutant se produit lorsque vous avez mal orthographié une variable :
int main() {
int aComplicatedName;
AComplicatedName = 1; /* mind the uppercase A */
return 0;
}
Par exemple, ce code donnerait une erreur, car vous devez utiliser std::string
:
#include <string>
int main() {
std::string s1 = "Hello"; // Correct.
string s2 = "world"; // WRONG - would give error.
}
void f() { g(); }
void g() { }
g
n'a pas été déclaré avant sa première utilisation. Pour le corriger, déplacez la définition de g
avant celle de f
:
void g() { }
void f() { g(); }
Soit ajouter une déclaration de g
avant f
:
void g(); // declaration
void f() { g(); }
void g() { } // definition
Ceci est spécifique à Visual Studio. Dans VS, vous devez ajouter #include "stdafx.h"
avant tout code. Le code qui le précède est ignoré par le compilateur, donc si vous avez ceci :
#include <iostream>
#include "stdafx.h"
Le `#include
#include "stdafx.h"
#include <iostream>
N'hésitez pas à modifier cette réponse.
En C et C++, tous les noms doivent être déclarés avant d'être utilisés. Si vous essayez d’utiliser le nom d’une variable ou d’une fonction qui n’a pas été déclarée, vous obtiendrez une erreur de type "identificateur non déclaré" ;.
Toutefois, les fonctions constituent un cas particulier en C (et en C uniquement), dans la mesure où il n’est pas nécessaire de les déclarer au préalable. Le compilateur C suppose que la fonction existe avec le nombre et le type d'arguments comme dans l'appel. Si la définition réelle de la fonction ne correspond pas à cela, vous obtiendrez une autre erreur. Ce cas particulier pour les fonctions n'existe pas en C++.
Vous corrigez ce genre d'erreurs en vous assurant que les fonctions et les variables sont déclarées avant d'être utilisées. Dans le cas de printf
, vous devez inclure le fichier d'en-tête <stdio.h>
(ou <cstdio>
en C++).
Pour les fonctions standard, je vous recommande de consulter par exemple [ce site de référence] (http://en.cppreference.com/w/), et de rechercher les fonctions que vous voulez utiliser. La documentation de chaque fonction vous indique de quel fichier d'en-tête vous avez besoin.
C'est comme utiliser la fonction sans la déclarer. Le fichier d'en-tête stdio.h contient la fonction printf(). fonction printf(). Inclure le fichier d'en-tête dans votre programme est la solution pour cela. Certaines fonctions définies par l'utilisateur peuvent également provoquer des erreurs si elles ne sont pas déclarées avant leur utilisation. Si elle est utilisée globalement, il n'y a pas de problème.