다음을 통해 공유


STD C++ 라이브러리에서 함수를 참조하려고 할 때 C2653 또는 C2039 오류

이 문서에서는 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);
}