Delen via


Compilerfout C2872

'symbool' : dubbelzinnig symbool

Opmerkingen

De compiler kan niet bepalen naar welk symbool u verwijst. Meer dan één symbool met de opgegeven naam valt binnen het bereik. Zie de opmerkingen na het foutbericht voor de bestandslocaties en declaraties die de compiler heeft gevonden voor het dubbelzinnige symbool. U kunt dit probleem oplossen door het dubbelzinnige symbool volledig te kwalificeren met behulp van de naamruimte, bijvoorbeeld std::byte of ::byte. U kunt ook een naamruimtealias gebruiken om een opgenomen naamruimte een handige korte naam te geven voor gebruik bij het ondubbelzinnig maken van symbolen in uw broncode.

C2872 kan optreden als een headerbestand een using-instructie bevat en een volgend headerbestand is opgenomen dat een type bevat dat ook in de naamruimte is opgegeven in de using instructie. Specificeer een using instructie pas nadat alle headerbestanden zijn opgegeven met #include.

C2872 kan optreden in Visual Studio 2013 vanwege een conflict tussen het Windows::Foundation::Metadata::Platform enumtype en de door C++/CX gedefinieerde Platform naamruimte. Volg deze stappen om dit probleem te omzeilen:

  • Verwijder de component 'using namespace Windows::Foundation::Metadata' uit de projectbestanden.

  • Geef de volledig gekwalificeerde naam op voor elk type dat in deze naamruimte is opgenomen.

Example

In het volgende voorbeeld wordt C2872 gegenereerd, omdat er een dubbelzinnige verwijzing wordt gemaakt naar een variabele met de naam i; twee variabelen met dezelfde naam vallen binnen het bereik:

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