컴파일러 오류 C2872
'symbol': 모호한 기호
컴파일러에서 참조하는 기호를 확인할 수 없습니다. 지정된 이름의 기호가 둘 이상 범위에 있습니다. 파일 위치 및 모호한 기호에 대해 컴파일러가 찾은 선언에 대한 오류 메시지 다음의 참고 사항을 참조하세요. 이 문제를 해결하려면 네임스페이스를 std::byte
사용하여 모호한 기호를 정규화할 ::byte
수 있습니다. 네임스페이스 별칭을 사용하여 소스 코드에서 기호를 구분할 때 사용할 수 있는 편리한 짧은 이름을 포함된 네임스페이스에 제공할 수도 있습니다.
헤더 파일에 using 지시문이 포함되어 있고 지시문에 지정된 using
네임스페이스에 있는 형식이 포함된 후속 헤더 파일이 포함된 경우 C2872가 발생할 수 있습니다. 모든 헤더 파일을 .으로 using
#include
지정한 후에만 지시문을 지정합니다.
C2872는 열거형 형식과 C++/CX 정의 Platform
네임스페이스 간의 Windows::Foundation::Metadata::Platform
충돌로 인해 Visual Studio 2013에서 발생할 수 있습니다. 이 문제를 해결하려면 다음과 같이 하십시오.
프로젝트 파일에서 "using namespace Windows::Foundation::Metadata" 절을 제거합니다.
이 네임스페이스에 포함된 모든 형식의 정규화된 이름을 지정합니다.
예시
다음 샘플에서는 이름이 i
같은 두 변수가 범위에 있으므로 C2872를 생성합니다.
// C2872.cpp
// compile with: cl /EHsc C2872.cpp
namespace A {
int i;
}
using namespace A;
int i;
int main() {
::i++; // ok, uses i from global namespace
A::i++; // ok, uses i from namespace A
i++; // C2872 ambiguous: ::i or A::i?
// To fix this issue, use the fully qualified name
// for the intended variable.
}