Error del compilador C2872

'símbolo': símbolo ambiguo

El compilador no puede determinar a qué símbolo se hace referencia. Hay más de un símbolo con el nombre especificado en el ámbito. Vea las notas que siguen al mensaje de error para saber las ubicaciones de archivo y las declaraciones que el compilador ha encontrado para el símbolo ambiguo. Para corregir este problema, puede usar el nombre completo del símbolo ambiguo con su espacio de nombres, por ejemplo, std::byte o ::byte. También puede usar un alias de espacio de nombres para proporcionarle a un espacio de nombres incluido un nombre corto cómodo para usarlo al eliminar la ambigüedad de los símbolos en el código fuente.

El error C2872 puede producirse si un archivo de encabezado tiene una directiva using y se incluye un archivo de encabezado posterior que contiene un tipo que también está en el espacio de nombres especificado en la directiva using. Especifique una directiva using solo después de especificar todos los archivos de encabezado con #include.

El error C2872 puede producirse en Visual Studio 2013 debido a un conflicto entre el tipo de enumeración Windows::Foundation::Metadata::Platform y el espacio de nombres Platform definido por C++/CX. Para solucionar este problema, siga estos pasos:

  • Quite la cláusula "using namespace Windows::Foundation::Metadata" de los archivos del proyecto.

  • Especifique el nombre completo de cualquier tipo que se incluya en este espacio de nombres.

Ejemplo

El ejemplo siguiente genera el error C2872, porque se hace una referencia ambigua a una variable denominada i. Hay dos variables con el mismo nombre en el ámbito:

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