Compartir a través de


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