Erreur C2653 ou C2039 lorsque vous essayez de référencer une fonction à partir de la bibliothèque STD C++
Cet article fournit des informations sur la résolution de l’erreur C2653 ou C2039 qui se produit lorsque vous référencez une fonction de la bibliothèque STD C++.
Version d’origine du produit : Visual C++
Numéro de la base de connaissances d’origine : 243444
Symptômes
Si vous essayez de référencer une fonction à partir de l’en-tête <cstdlib>
de bibliothèque STD C++ à l’aide de l’espace de noms std
(par exemple, std::exit(0)
), le compilateur émet un message d’erreur C2653 ou C2039 (selon que l’espace de noms std
est défini ou non au point où l’erreur est émise).
Cause
<cstdlib>
ne définit pas l’espace de noms std
. Cela est contraire à la documentation Visual C++, qui dit :
Incluez l’en-tête <cstdlib>
standard pour inclure efficacement l’en-tête <stdlib.h>
standard dans l’espace de std
noms.
Résolution
Pour contourner le problème, placez dans #include <cstdlib>
l’espace de noms std
.
Plus d’informations
Si vous tentez de compiler les éléments suivants, le compilateur affiche l’erreur suivante :
erreur C2653 : 'std' : n’est pas un nom de classe ou d’espace de noms
// Compile Options: /GX
#include <cstdlib>
void main()
{
std::exit(0);
}
Toutefois, si vous tentez de compiler les éléments suivants, le compilateur affiche l’erreur suivante :
erreur C2039 : 'exit' : n’est pas membre de 'std'
// Compile Options: /GX
#include <vector>
#include <cstdlib>
void main()
{
std::exit(0);
}
Dans le premier cas, l’erreur C2653 s’affiche, car l’espace de noms std
n’a pas été défini. Dans le deuxième cas, la valeur C2039 s’affiche, car l’espace de noms std
a été défini (dans l’en-tête <vector>
), mais la fonction exit
ne fait pas partie de cet espace de noms. Pour contourner le problème dans les deux cas, placez simplement dans #include <cstdlib>
l’espace de noms std
, comme suit :
// Compile Options: /GX
namespace std
{
#include <cstdlib>
};
void main()
{
std::exit(0);
}