Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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);
}