在C ++中访问父命名空间

时间:2009-07-16 18:31:01

标签: c++ inheritance namespaces

我有一个如下情况:

class criterion 
{
// stuff about criteria...
};
namespace hex {

     class criterion : public criterion //does not compile
     {                                  //This should inherit from the
     //A hex specific criterion         //criterion class in the global namespace
     };

};

我的问题是 - 如何从作为另一个名称空间的父级的namspace中的类继承?

Billy3

4 个答案:

答案 0 :(得分:13)

您需要指定命名空间,在本例中为全局命名空间:

 class criterion : public ::criterion 

请注意,c ++没有指定任何导航命名空间的方法,就像它们是树一样。例如,您不能使用“..”或任何其他简写来指定“父”命名空间 - 您必须使用其名称。

答案 1 :(得分:8)

以“::”

开头

例如

class criterion : public ::criterion {};

答案 2 :(得分:3)

这为我编译,基本上只是显式地显示父类的命名空间:

class A
{};
namespace B {
    class A : public ::A
    {};
    namespace C {
        class A : public B::A
        {};
    }
};

答案 3 :(得分:3)

简化的基本C ++命名空间规则是:

  • 您可以访问父命名空间路径中的任何内容,而无需指定命名空间。
  • 您可以通过仅指定相对路径来访问子命名空间路径中的任何内容。
  • 其他一切都需要完整的命名空间规范。