Error C2653 o C2039 al intentar hacer referencia a una función desde la biblioteca de C++ de STD
En este artículo se proporciona información sobre cómo resolver el error C2653 o C2039 que se produce al hacer referencia a una función de la biblioteca de C++ de STD.
Versión original del producto: Visual C++
Número de KB original: 243444
Síntomas
Al intentar hacer referencia a una función desde el encabezado <cstdlib> de la biblioteca de C++ de STD mediante el espacio de nombres std (por ejemplo, ) hace std::exit(0)que el compilador emita un mensaje de error C2653 o C2039 (dependiendo de si el espacio de nombres std se define en el punto en que se emite el error).
Causa
<cstdlib> no define el espacio de nombres std. Esto es contrario a la documentación de Visual C++, que dice:
Incluya el encabezado <cstdlib> estándar para incluir eficazmente el encabezado <stdlib.h> estándar dentro del espacio de std nombres.
Solución
Para solucionar el problema, coloque en el #include <cstdlib> espacio de nombres std.
Más información
Si intenta compilar lo siguiente, el compilador mostrará el siguiente error:
error C2653: 'std': no es un nombre de clase o espacio de nombres
// Compile Options: /GX
#include <cstdlib>
void main()
{
std::exit(0);
}
Sin embargo, al intentar compilar lo siguiente, el compilador muestra el siguiente error:
error C2039: 'exit': no es miembro de 'std'
// Compile Options: /GX
#include <vector>
#include <cstdlib>
void main()
{
std::exit(0);
}
En el primer caso, se muestra el C2653, porque no se ha definido el espacio de nombres std . En el segundo caso, se muestra el C2039, porque el espacio de nombres std se ha definido (en el encabezado <vector>), pero la función exit no forma parte de ese espacio de nombres. Para solucionar el problema en cualquier caso, simplemente incluya en el #include <cstdlib> espacio de nombres std, como se indica a continuación:
// Compile Options: /GX
namespace std
{
#include <cstdlib>
};
void main()
{
std::exit(0);
}