添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

“symbol”:符号不明确

编译器无法确定引用的是哪个符号。 范围中有多个具有指定名称的符号。 请参阅错误消息后面的说明,了解编译器为不明确的符号找到的文件位置和声明。 若要解决此问题,可以使用其命名空间(例如 std::byte ::byte )来完全限定不明确的符号。 还可以使用 命名空间别名 为包含的命名空间提供一个方便的短名称,以便在源代码中消除符号歧义时使用。

如果头文件包含 using 指令 ,并且包含后续的头文件,该头文件包含同样在 using 指令指定的命名空间中的类型,则可能发生 C2872。 仅在使用 #include 指定所有头文件之后才能指定 using 指令。

在 Visual Studio 2013 中,由于 Windows::Foundation::Metadata::Platform 枚举类型和 C++/CX 定义的 Platform 命名空间之间的冲突,可能会发生 C2872。 若要解决此问题,请按照以下步骤操作:

  • 从项目文件中删除“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.
    
  •