Переадресация классов в пространствах имен
Я был довольно удивлен, узнав, что я не мог переслать объявление класса из другой области с помощью оператора разрешения области, т.е.
class someScope::someClass;
Вместо этого полная декларация должна использоваться следующим образом:
namespace
{
class someClass;
}
Может кто-нибудь объяснить, почему это так?
ОБНОВЛЕНИЕ. Чтобы уточнить, я задаю , почему это так.
Ответы
Ответ 1
Кажется, что ответ кроется в спецификации С++:
3.3.5 "Область пространства имен" в стандарте.
Объекты, объявленные в пространстве имен считаются членами пространство имен и имена, введенные эти объявления в декларативная область пространства имен называются именами участников Пространство имен.
Элемент пространства имен также может быть упоминается после:: scope (5.1) применяется к имя своего пространства имен или имя пространства имен, которое назначает пространства имен участников в с помощью директивы
Ответ 2
Вы не можете объявить класс вне своего пространства имен, потому что компилятор не мог знать тип someScope.
namespace {} требуется для объявления существования пространства имен, а затем объявить класс someClass в вашу область действия.
Ответ 3
Я не знаю, почему. Возможно, потому что в вашем первом фрагменте кода someScope
не объявлен. Это может быть пространство имен или имя класса. Если someScope - это имя класса, вы не можете самостоятельно переслать объявление члена класса другого класса.