Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten artykuł zawiera informacje dotyczące rozwiązywania błędu C2653 lub C2039 występującego podczas odwoływanie się do funkcji z biblioteki STD C++.
Oryginalna wersja produktu: Visual C++
Oryginalny numer KB: 243444
Symptomy
Próba odwołania się do funkcji z nagłówka <cstdlib> biblioteki STD C++ przy użyciu przestrzeni nazw std (na przykład ) powoduje, że kompilator emituje komunikat o błędzie C2653 lub C2039 (w zależności od tego, std::exit(0)czy przestrzeń nazw std jest zdefiniowana w punkcie, w którym jest emitowany błąd).
Przyczyna
<cstdlib> nie definiuje przestrzeni nazw std. Jest to sprzeczne z dokumentacją języka Visual C++, która mówi:
Uwzględnij nagłówek standardowy, aby skutecznie uwzględnić nagłówek <cstdlib> <stdlib.h> standardowy w std przestrzeni nazw.
Rozwiązanie
Aby obejść ten problem, umieść element #include <cstdlib> w przestrzeni nazw std.
Więcej informacji
Próba skompilowania następującego elementu spowoduje, że kompilator wyświetli następujący błąd:
błąd C2653: "std": nie jest nazwą klasy ani przestrzeni nazw
// Compile Options: /GX
#include <cstdlib>
void main()
{
std::exit(0);
}
Jednak próba skompilowania następujących przyczyn powoduje, że kompilator wyświetli następujący błąd:
błąd C2039: "exit" : nie jest członkiem "std"
// Compile Options: /GX
#include <vector>
#include <cstdlib>
void main()
{
std::exit(0);
}
W pierwszym przypadku jest wyświetlany kod C2653, ponieważ przestrzeń nazw std nie została zdefiniowana. W drugim przypadku jest wyświetlany kod C2039, ponieważ przestrzeń nazw std została zdefiniowana (w nagłówku <vector>), ale funkcja exit nie jest częścią tej przestrzeni nazw. Aby obejść ten problem w obu przypadkach, po prostu ująć element #include <cstdlib> w przestrzeni nazw stdw następujący sposób:
// Compile Options: /GX
namespace std
{
#include <cstdlib>
};
void main()
{
std::exit(0);
}