Sdílet prostřednictvím


Chyba kompilátoru C2872

'symbol' : nejednoznačný symbol

Poznámky

Kompilátor nemůže určit, na který symbol odkazujete. V oboru je více než jeden symbol se zadaným názvem. Podívejte se na poznámky za chybovou zprávou pro umístění souborů a deklaracemi kompilátoru nalezeného pro nejednoznačný symbol. Pokud chcete tento problém vyřešit, můžete plně kvalifikovat nejednoznačný symbol pomocí jeho oboru názvů, například std::byte nebo ::byte. Alias oboru názvů můžete použít také k poskytnutí vhodného krátkého názvu, který můžete použít při nejednoznačných symbolech ve zdrojovém kódu.

C2872 může nastat, pokud hlavičkový soubor obsahuje direktivu using a další hlavičkový soubor je zahrnut, který obsahuje typ, který je také v oboru názvů specifikovaném v direktivěusing. Zadejte direktivu using až po zadání všech souborů hlaviček pomocí #include.

C2872 může v sadě Visual Studio 2013 nastat kvůli konfliktu mezi Windows::Foundation::Metadata::Platform typem výčtu a oborem názvů definovaným jazykem Platform C++/CX. Chcete-li tento problém vyřešit, postupujte takto:

  • Odeberte ze souborů projektu klauzuli using namespace Windows::Foundation::Metadata.

  • Zadejte plně kvalifikovaný název pro libovolný typ, který je součástí tohoto oboru názvů.

Příklad

Následující příklad generuje C2872, protože nejednoznačný odkaz je vytvořen na proměnnou s názvem i; dvě proměnné se stejným názvem jsou v oboru:

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