Подтвердить что ты не робот

Классы и пространства имен, имеющие одно и то же имя в С++

Скажем, у меня есть класс под названием "foo" в пространстве имен "abc"...

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

... а затем скажем, что у меня есть другой класс с именем "abc" в другом пространстве имен

#include "foo.h"

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

abc:: a не будет определенным типом, потому что он будет искать класс abc, а не пространство имен abc. Как я могу сделать ссылку на объект в другом пространстве имен, где это другое пространство имен имеет то же имя, что и класс, в котором я находится?

4b9b3361

Ответ 1

Вы можете использовать ::abc::xx, то есть идентифицировать переменную или тип как ее абсолютный путь пространства имен. Если вы не укажете абсолютное имя, относительные имена начнут перемещаться вверх в пространстве имен/классов.

Ответ 2

Вы можете использовать префикс :: для обозначения начала из глобального пространства имен, поэтому в вашем случае ::abc будет обозначать пространство имен abc из вашего первого фрагмента кода.

Ответ 3

Вы можете указать полное имя, начинающееся с ::, которое определяет глобальное пространство имен, например:

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
  };
}