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