컴파일러 오류 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.
}