2009-07-16 95 views
10

我有像下面这样的场景:访问父命名空间在C++

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

回答

7

开始用 “​​::”

例如

class criterion : public ::criterion {}; 
12

你需要指定的命名空间,在这种情况下,全球性的:

class criterion : public ::criterion 

注C++没有指定任何方式来浏览命名空间,就好像它们是一棵树。例如,您不能使用“..”或其他简写形式指定“父”名称空间,您必须使用其名称。

3

这编译对我来说,基本上只是明确表明在哪些命名空间中的父类是:

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

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

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