Condividi tramite


Errore del compilatore C2872

'symbol': simbolo ambiguo

Il compilatore non è in grado di determinare il simbolo a cui si fa riferimento. Nell'ambito sono inclusi più simboli con il nome specificato. Vedere le note che seguono il messaggio di errore per i percorsi dei file e le dichiarazioni trovate dal compilatore per il simbolo ambiguo. Per risolvere questo problema, è possibile qualificare completamente il simbolo ambiguo usando il relativo spazio dei nomi, std::byte ad esempio o ::byte. È anche possibile usare un alias dello spazio dei nomi per assegnare a uno spazio dei nomi incluso un nome breve da usare quando si disambiguano i simboli nel codice sorgente.

C2872 può verificarsi se un file di intestazione include una direttiva using e viene incluso un file di intestazione successivo che contiene un tipo che si trova anche nello spazio dei nomi specificato nella using direttiva . Specificare una using direttiva solo dopo che tutti i file di intestazione vengono specificati con #include.

C2872 può verificarsi in Visual Studio 2013 a causa di un conflitto tra il Windows::Foundation::Metadata::Platform tipo di enumerazione e lo spazio dei nomi definito da Platform C++/CX. Per aggirare questo problema, attenersi alla seguente procedura:

  • Rimuovere la clausola "using namespace Windows::Foundation::Metadata" dai file di progetto.

  • Specificare il nome completo per qualsiasi tipo incluso in questo spazio dei nomi.

Esempio

L'esempio seguente genera l'errore C2872, perché viene eseguito un riferimento ambiguo a una variabile denominata i. Nell'ambito sono incluse due variabili con lo stesso nome:

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