Доступ к родительскому пространству имен в C ++ - PullRequest
13 голосов
/ 16 июля 2009

У меня есть сценарий, подобный следующему:

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 ]

13 голосов
/ 16 июля 2009

Вам необходимо указать пространство имен, в данном случае глобальное:

 class criterion : public ::criterion 

Обратите внимание, что c ++ не указывает никаких средств навигации по пространствам имен, как если бы они были деревом. Например, вы не можете указать «родительское» пространство имен, используя «..» или любую другую стенограмму - вы должны использовать его имя.

8 голосов
/ 16 июля 2009

Начните с "::"

Например

class criterion : public ::criterion {};
3 голосов
/ 10 февраля 2017

Упрощенные основные правила пространства имен C ++:

  • Вы можете получить доступ ко всему в пути родительского пространства имен без указания пространства имен.
  • Вы можете получить доступ ко всему в пути дочернего пространства имен, указав только относительный путь.
  • Все остальное требует полных спецификаций пространства имен.
3 голосов
/ 16 июля 2009

Это компилируется для меня, в основном просто явно показывает, в каком пространстве имен родительский класс:

class A
{};
namespace B {
    class A : public ::A
    {};
    namespace C {
        class A : public B::A
        {};
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...