Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo fornece as informações sobre como resolver o erro C2653 ou C2039 que ocorre quando você faz referência a uma função da biblioteca STD C++.
Versão original do produto: Visual C++
Número original do KB: 243444
Sintomas
A tentativa de referenciar uma função do cabeçalho <cstdlib> da biblioteca STD C++ usando o namespace std (por exemplo, std::exit(0)) faz com que o compilador emita uma mensagem de erro C2653 ou C2039 (dependendo se o namespace std está definido ou não no ponto em que o erro é emitido).
Causa
<cstdlib> não define o namespace std. Isso é contrário à documentação do Visual C++, que diz:
Inclua o cabeçalho <cstdlib> padrão para incluir efetivamente o cabeçalho <stdlib.h> padrão no std namespace.
Solução
Para contornar o problema, coloque o #include <cstdlib> no namespace std.
Mais informações
A tentativa de compilar o seguinte fará com que o compilador exiba o seguinte erro:
erro C2653: 'std': não é um nome de classe ou namespace
// Compile Options: /GX
#include <cstdlib>
void main()
{
std::exit(0);
}
No entanto, a tentativa de compilar o seguinte faz com que o compilador exiba o seguinte erro:
erro C2039: 'exit': não é membro de 'std'
// Compile Options: /GX
#include <vector>
#include <cstdlib>
void main()
{
std::exit(0);
}
No primeiro caso, o C2653 é exibido, pois o namespace std não foi definido. No segundo caso, o C2039 é exibido, porque o namespace std foi definido (no cabeçalho <vector>), mas a função exit não faz parte desse namespace. Para contornar o problema em ambos os casos, basta colocar o #include <cstdlib> no namespace std, da seguinte forma:
// Compile Options: /GX
namespace std
{
#include <cstdlib>
};
void main()
{
std::exit(0);
}