Teilen über


Compilerfehler C2872

"Symbol" : mehrdeutiges Symbol

Bemerkungen

Der Compiler kann nicht bestimmen, auf welches Symbol Sie verweisen. Mehrere Symbole mit dem angegebenen Namen befinden sich im Bereich. In den Hinweisen nach der Fehlermeldung für die Dateispeicherorte und Deklarationen, die der Compiler für das mehrdeutige Symbol gefunden hat. Um dieses Problem zu beheben, können Sie das mehrdeutige Symbol vollständig qualifizieren, indem Sie dessen Namespace verwenden, z std::byte . B. oder ::byte. Sie können auch einen Namespacealias verwenden, um einem eingeschlossenen Namespace einen praktischen kurzen Namen zu geben, der verwendet werden kann, wenn Sie Symbole in Ihrem Quellcode unterscheiden.

C2872 kann auftreten, wenn eine Headerdatei eine using-Direktive enthält und eine nachfolgende Headerdatei enthalten ist, die einen Typ enthält, der sich auch im in der using Direktive angegebenen Namespace befindet. Geben Sie eine using Direktive nur an, nachdem alle Headerdateien mit #include.

C2872 kann in Visual Studio 2013 aufgrund eines Konflikts zwischen dem Windows::Foundation::Metadata::Platform Enumerationstyp und dem C++/CX-definierten Platform Namespace auftreten. Gehen Sie folgendermaßen vor, um dieses Problem zu umgehen:

  • Entfernen Sie die Klausel "using namespace Windows::Foundation::Metadata" aus den Projektdateien.

  • Geben Sie den vollqualifizierten Namen für jeden Typ an, der in diesem Namespace enthalten ist.

Beispiel

Im folgenden Beispiel wird C2872 generiert, da ein mehrdeutiger Verweis auf eine Variable mit dem Namen ierfolgt; zwei Variablen mit demselben Namen befinden sich im Bereich:

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