共用方式為


編譯器錯誤 C2872

'symbol' : 模棱兩可的符號

編譯程式無法判斷您要參考的符號。 具有指定名稱的多個符號位於範圍內。 請參閱下列錯誤訊息,以瞭解針對模棱兩可符號找到的編譯程式位置與宣告。 若要修正此問題,您可以使用其命名空間來完整限定模棱兩可的符號,例如 std::byte::byte。 您也可以使用 命名空間別名 ,為包含的命名空間提供方便的簡短名稱,以在原始程式碼中釐清符號時使用。

如果頭檔包含 using 指示詞,而且後續的頭檔會包含同時在 指示詞中指定的 using 命名空間中,就會發生 C2872。 using只有在使用 指定所有頭文件之後,才指定 #include指示詞。

C2872 可能發生在 Visual Studio 2013 中,因為列舉類型與C++/CX 定義的Platform命名空間之間Windows::Foundation::Metadata::Platform發生衝突。 若要解決此問題,請依照下列步驟執行:

  • 從項目檔中移除 「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.
}