假设我在头文件中定义了以下内容:
namespace MyNamespace
{
Class global_c;
}
然后我在源文件中执行此操作:
namespace MyNamespace
{
void MyClass::Function( )
{
::global_c.DoSomething( );
}
}
如果我只做global_c.DoSomething(); global_c结果是编译器未定义的。但如果我添加'using namespace MyNamespace;'它编译得很好在文件的顶部,它也可以正常工作。
由于global_c与'MyClass'位于同一名称空间中,为什么不能仅仅因为'::'被添加到它的前面来解决它?
答案 0 :(得分:10)
因为您通过在::
前加上变量来明确告诉编译器使用全局命名空间。由于global_c
在全局命名空间中不存在,因此会引发错误。
编译器正在执行您告诉它要做的事情。将::
视为Global::
。