命名空间对我没有意义

时间:2012-03-08 00:00:47

标签: c++ namespaces

假设我在头文件中定义了以下内容:

namespace MyNamespace
{
   Class global_c;
}

然后我在源文件中执行此操作:

namespace MyNamespace
{
   void MyClass::Function( )
   {
       ::global_c.DoSomething( );
   }
}
如果我只做global_c.DoSomething();

global_c结果是编译器未定义的。但如果我添加'using namespace MyNamespace;'它编译得很好在文件的顶部,它也可以正常工作。

由于global_c与'MyClass'位于同一名称空间中,为什么不能仅仅因为'::'被添加到它的前面来解决它?

1 个答案:

答案 0 :(得分:10)

因为您通过在::前加上变量来明确告诉编译器使用全局命名空间。由于global_c在全局命名空间中不存在,因此会引发错误。

编译器正在执行您告诉它要做的事情。将::视为Global::