Compartilhar via


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