utiliza tipo sirve que puede pero para nombres net namespace métodos miembros espacios espacio error directamente contener como campos c++ class syntax namespaces definition

c++ - tipo - Definiendo una clase dentro de un espacio de nombres



un espacio de nombres no puede contener directamente miembros como campos o métodos (4)

Estás cerca, puedes reenviar la clase en el espacio de nombres y luego definirla afuera si quieres:

namespace ns { class A; // just tell the compiler to expect a class def } class ns::A { // define here };

Lo que no puede hacer es definir la clase en el espacio de nombres sin miembros y luego definir la clase nuevamente fuera del espacio de nombres. Eso viola la Regla de definición única (o alguna tontería).

¿Hay una manera más sucinta de definir una clase en un espacio de nombres que esta:

namespace ns { class A {}; }

Esperaba algo como la class ns::A {}; Funcionaría, pero por desgracia no.


La sección que debes leer es esta:

7.3.1.2 Definiciones de miembros del espacio de nombres

3 Todos los nombres declarados por primera vez en un espacio de nombres son miembros de ese espacio de nombres. [...]

Note el término - declaración para que D.Shawley (y su ejemplo) sea correcto.


No tu no puedes Para citar el estándar de C ++, sección 3.3.5:

Un nombre declarado fuera de todos los espacios de nombres con nombre o sin nombre (7.3), bloques (6.3), diversión (8.3.5), definiciones de funciones (8.4) y clases (cláusula 9) tiene un alcance de espacio de nombres global

Por lo tanto, la declaración debe estar dentro de un bloque de espacio de nombres; la definición, por supuesto, puede estar fuera de él.


Puedes hacer eso, pero no es realmente más sucinto.

namespace ns { class A; } class ns::A { };

O

namespace ns { class B; } using ns::B; class B { };