2009-07-16 5 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++ являются:

  • Вы можете получить доступ что-нибудь в пути родительского пространства имен без указав пространство имен.
  • Вы можете получить доступ к чему-либо в пути имен дочернего пространства, указав только относительный путь.
  • Все остальное требует полных спецификаций пространства имен.
Смежные вопросы