Kompilatorfel C2872

"symbol" : tvetydig symbol

Anmärkningar

Kompilatorn kan inte avgöra vilken symbol du refererar till. Mer än en symbol med det angivna namnet finns i omfånget. Se anteckningarna efter felmeddelandet för filplatserna och deklarationerna som kompilatorn hittade för den tvetydiga symbolen. För att åtgärda det här problemet kan du helt kvalificera den tvetydiga symbolen med hjälp av dess namnområde, till exempel std::byte eller ::byte. Du kan också använda ett namnområdesalias för att ge ett inkluderat namnområde ett praktiskt kort namn för användning vid tvetydiga symboler i källkoden.

C2872 kan inträffa om en rubrikfil innehåller ett användningsdirektiv och en efterföljande rubrikfil ingår som innehåller en typ som också finns i det namnområde som anges i using direktivet. Ange ett using direktiv först när alla huvudfiler har angetts med #include.

C2872 kan inträffa i Visual Studio 2013 på grund av en konflikt mellan Windows::Foundation::Metadata::Platform enumtypen och det C++/CX-definierade Platform namnområdet. Följ dessa steg för att lösa det här problemet:

  • Ta bort satsen "using namespace Windows::Foundation::Metadata" från projektfilerna.

  • Ange det fullständigt kvalificerade namnet för alla typer som ingår i det här namnområdet.

Example

I följande exempel genereras C2872 eftersom en tvetydig referens görs till en variabel med namnet i. Två variabler med samma namn finns i omfånget:

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