Error del compilador C2872Compiler Error C2872

'Symbol': símbolo ambiguo'symbol' : ambiguous symbol

El compilador no puede determinar a qué símbolo hace referencia.The compiler cannot determine which symbol you are referring to. Hay más de un símbolo con el nombre especificado en el ámbito.More than one symbol with the specified name is in scope. Vea las notas que siguen al mensaje de error para las ubicaciones y declaraciones de archivo que el compilador encontró para el símbolo ambiguo.See the notes following the error message for the file locations and declarations the compiler found for the ambiguous symbol. Para corregir este problema, puede calificar totalmente el símbolo ambiguo mediante su espacio de nombres, por ejemplo, std::byte o ::byte .To fix this issue, you can fully qualify the ambiguous symbol by using its namespace, for example, std::byte or ::byte. También puede usar un alias de espacio de nombres para proporcionar a un espacio de nombres incluido un nombre corto adecuado para usarlo cuando ambigüedad símbolos en el código fuente.You can also use a namespace alias to give an included namespace a convenient short name for use when disambiguating symbols in your source code.

C2872 puede producirse si un archivo de encabezado incluye una directiva usingy se incluye un archivo de encabezado subsiguiente que contiene un tipo que también se encuentra en el espacio de nombres especificado en la using Directiva.C2872 can occur if a header file includes a using directive, and a subsequent header file is included that contains a type that is also in the namespace specified in the using directive. Especifique una using directiva solo después de que se especifiquen todos los archivos de encabezado con #include .Specify a using directive only after all your header files are specified with #include.

C2872 puede producirse en Visual Studio 2013 debido a un conflicto entre el Windows::Foundation::Metadata::Platform tipo de enumeración y el espacio de nombres de C++/CX-Defined Platform .C2872 can occur in Visual Studio 2013 due to a conflict between the Windows::Foundation::Metadata::Platform enum type and the C++/CX-defined Platform namespace. Para solucionar este problema, siga estos pasos:To work around this problem, follow these steps:

  • Quite la cláusula "Using namespace Windows:: Foundation:: Metadata" de los archivos de proyecto.Remove the "using namespace Windows::Foundation::Metadata" clause from the project files.

  • Especifique el nombre completo de cualquier tipo que esté incluido en este espacio de nombres.Specify the fully qualified name for any type that is included in this namespace.

EjemploExample

En el ejemplo siguiente se genera C2872, porque se realiza una referencia ambigua a una variable denominada i ; dos variables con el mismo nombre están en el ámbito:The following sample generates C2872, because an ambiguous reference is made to a variable named i; two variables with the same name are in scope:

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