在C ++中共享相同名称的类和命名空间

时间:2010-11-01 16:30:38

标签: c++ class namespaces symbols

假设我在命名空间“abc”中有一个名为'foo'的类......

namespace abc {
     class foo {
         int a;
         int b;
     };
}

...然后说我在另一个命名空间中有另一个名为“abc”的类

#include "foo.h"

namespace foo {
    class abc {
        abc::a = 10;
    };
}

abc :: a不是定义的类型,因为它将搜索类abc,而不是命名空间abc。我如何正确引用另一个名称空间中的对象,其中另一个名称空间与我所在的类名称相同?

3 个答案:

答案 0 :(得分:23)

您可以使用::abc::xx,即将变量或类型标识为其绝对命名空间路径。如果未指定绝对名称,则相对名称将在包含名称空间/类中开始向上。

答案 1 :(得分:6)

您可以使用前缀::来表示从全局命名空间开始,因此在您的情况下,::abc将表示您的第一个代码段中的abc命名空间。

答案 2 :(得分:5)

您可以从定义全局命名空间的::开始指定一个完全限定的名称,例如:

namespace abc {
   class foo {
       int a;
       int b;
   };
}

namespace foo {
  class abc {
      ::abc::foo a; // Changed from 'abc::a = 10;' since it doesn't compile
  };
}