Erro do compilador C2872
'symbol': símbolo ambíguo
O compilador não pode determinar a qual símbolo você está se referindo. Mais de um símbolo com o nome especificado está no escopo. Confira as anotações após a mensagem de erro para os locais do arquivo e declarações que o compilador encontrou para o símbolo ambíguo. Para corrigir esse problema, você pode qualificar totalmente o símbolo ambíguo usando o namespace dele, por exemplo, std::byte
ou ::byte
. Você também pode usar um alias de namespace para dar a um namespace incluído um nome curto conveniente para uso ao desambiguar símbolos em seu código-fonte.
O erro C2872 poderá ocorrer se um arquivo de cabeçalho incluir uma diretiva de uso e um arquivo de cabeçalho subsequente estiver incluído que contém um tipo que também está no namespace especificado na diretiva using
. Especifique uma diretiva using
somente depois que todos os arquivos de cabeçalho forem especificados com #include
.
O erro C2872 pode ocorrer no Visual Studio 2013 devido a um conflito entre o tipo enumerado Windows::Foundation::Metadata::Platform
e o namespace Platform
definido por C++/CX. Para contornar esse problema, siga estas etapas:
Remova a cláusula "using namespace Windows::Foundation::Metadata" dos arquivos de projeto.
Especifique o nome totalmente qualificado para qualquer tipo incluído neste namespace.
Exemplo
O exemplo a seguir gera o erro C2872, pois uma referência ambígua é feita a uma variável nomeada i
; duas variáveis com o mesmo nome estão no escopo:
// 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.
}