“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.