이 문서에서는 STD C++ 라이브러리에서 함수를 참조할 때 발생하는 C2653 또는 C2039 오류를 해결하는 방법에 대한 정보를 제공합니다.
원래 제품 버전: Visual C++
원래 KB 번호: 243444
증상
네임스페이스를 std
std::exit(0)
사용하여 STD C++ 라이브러리 헤더 <cstdlib>
에서 함수를 참조하려고 하면 컴파일러가 C2653 또는 C2039를 내보냅니다(오류가 내보내지는 지점에서 네임스페이스가 std
정의되었는지 여부에 따라 다름).
원인
<cstdlib>
에서는 네임스페이스를 std
정의하지 않습니다. 이는 다음과 같은 Visual C++ 설명서와는 반대입니다.
네임스페이스 내에 표준 헤더 <cstdlib>
를 효과적으로 포함할 표준 헤더 <stdlib.h>
를 std
포함합니다.
해결
문제를 해결하려면 네임스페이 #include <cstdlib>
스에 배치합니다 std
.
자세한 정보
다음을 컴파일하려고 하면 컴파일러에서 다음 오류가 표시됩니다.
오류 C2653: 'std': 클래스 또는 네임스페이스 이름이 아닙니다.
// Compile Options: /GX
#include <cstdlib>
void main()
{
std::exit(0);
}
그러나 다음을 컴파일하려고 하면 컴파일러에서 다음 오류가 표시됩니다.
오류 C2039: 'exit': 'std'의 멤버가 아닙니다.
// Compile Options: /GX
#include <vector>
#include <cstdlib>
void main()
{
std::exit(0);
}
첫 번째 경우 네임스페이스가 std
정의되지 않았기 때문에 C2653이 표시됩니다. 두 번째 경우에는 네임스페이스가 헤더에 <vector>
정의되었지만 함수 exit
가 해당 네임스페 std
이스의 일부가 아니기 때문에 C2039가 표시됩니다. 두 경우 모두 문제를 해결하려면 다음과 같이 네임스페이 #include <cstdlib>
스에 std
묶기만 하면 됩니다.
// Compile Options: /GX
namespace std
{
#include <cstdlib>
};
void main()
{
std::exit(0);
}