Поделиться через


Ошибка компилятора C2872

Символ : неоднозначный символ

Замечания

Компилятор не может определить, какой символ вы ссылаетесь. В области находится несколько символов с указанным именем. См. примечания после сообщения об ошибке для расположений файлов и объявлений компилятора, найденного для неоднозначного символа. Чтобы устранить эту проблему, можно полностью квалифицировать неоднозначный символ с помощью своего пространства имен, например std::byte или ::byte. Вы также можете использовать псевдоним пространства имен, чтобы предоставить включенное пространство имен удобное короткое имя для использования при диамбигации символов в исходном коде.

C2872 может возникать, если файл заголовка содержит директиву using, а последующий файл заголовка включается, содержащий тип, который также находится в пространстве имен, указанном в директиве using . Укажите директиву using только после указания всех файлов заголовков.#include

C2872 может происходить в Visual Studio 2013 из-за Windows::Foundation::Metadata::Platform конфликта между типом Platform перечисления и пространством имен C++/CX. Чтобы обойти эту проблему, выполните следующие действия:

  • Удалите предложение "Using namespace Windows::Foundation::Metadata" из файлов проекта.

  • Укажите полное имя любого типа, включенного в это пространство имен.

Пример

В следующем примере возникает ошибка C2872, так как делается неоднозначная ссылка на переменную с именем i, и две переменные с одинаковым именем находятся в области видимости.

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