컴파일러 오류 C2872Compiler Error C2872

'symbol': 모호한 기호입니다.'symbol' : ambiguous symbol

컴파일러가 참조 하는 기호를 확인할 수 없습니다.The compiler cannot determine which symbol you are referring to. 지정 된 이름의 기호가 둘 이상 범위에 있습니다.More than one symbol with the specified name is in scope. 컴파일러에서 모호한 기호에 대해 찾은 파일 위치 및 선언에 대 한 오류 메시지 뒤에 나오는 참고를 참조 하세요.See the notes following the error message for the file locations and declarations the compiler found for the ambiguous symbol. 이 문제를 해결 하기 위해 또는와 같은 네임 스페이스를 사용 하 여 모호한 기호를 정규화 할 수 있습니다 std::byte ::byte .To fix this issue, you can fully qualify the ambiguous symbol by using its namespace, for example, std::byte or ::byte. 네임 스페이스 별칭 을 사용 하 여 소스 코드에서 기호를 명확히 구분 때 사용할 편리한 짧은 이름을 포함 된 네임 스페이스에 제공할 수도 있습니다.You can also use a namespace alias to give an included namespace a convenient short name for use when disambiguating symbols in your source code.

C2872는 헤더 파일에 using 지시문이 포함 되어 있고 지시문에 지정 된 네임 스페이스에도 있는 형식을 포함 하는 후속 헤더 파일이 포함 되어 있는 경우에 발생할 수 있습니다 using .C2872 can occur if a header file includes a using directive, and a subsequent header file is included that contains a type that is also in the namespace specified in the using directive. using 모든 헤더 파일이로 지정 된 후에만 지시문을 지정 #include 합니다.Specify a using directive only after all your header files are specified with #include.

C2872는 Windows::Foundation::Metadata::Platform 열거형 형식과 c + +/CX-defined 네임 스페이스 간의 충돌로 인해 Visual Studio 2013에서 발생할 수 있습니다 Platform .C2872 can occur in Visual Studio 2013 due to a conflict between the Windows::Foundation::Metadata::Platform enum type and the C++/CX-defined Platform namespace. 이 문제를 해결 하려면 다음 단계를 수행 합니다.To work around this problem, follow these steps:

  • 프로젝트 파일에서 "using namespace Windows:: Foundation:: Metadata" 절을 제거 합니다.Remove the "using namespace Windows::Foundation::Metadata" clause from the project files.

  • 이 네임 스페이스에 포함 된 모든 형식의 정규화 된 이름을 지정 합니다.Specify the fully qualified name for any type that is included in this namespace.

예제Example

다음 샘플에서는 이름이 인 변수에 대해 모호한 참조가 있으므로 C2872을 생성 합니다 i . 이름이 같은 두 개의 변수가 범위 내에 있습니다.The following sample generates C2872, because an ambiguous reference is made to a variable named i; two variables with the same name are in scope:

// 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.
}