class Namespace::Class;
¿Por qué tengo que hacer esto ?:¿Por qué no puedo reenviar-declarar una clase en un espacio de nombres usando dos puntos y coma?
namespace Namespace {
class Class;
}
usando VC++ 8.0, los problemas del compilador:
error C2653: 'Espacio de nombres': no es un nombre de clase o espacio de nombres
Supongo que el problema aquí es que el compilador no puede decir si Namespace
es una clase o un espacio de nombres? Pero, ¿por qué es importante ya que es solo una declaración avanzada?
¿Hay alguna otra manera de reenviar-declarar una clase definida en algún espacio de nombres? La sintaxis anterior se siente como si estuviera "reabriendo" el espacio de nombres y ampliando su definición. ¿Qué pasa si Class
no fueron realmente definidos en Namespace
? ¿Esto resultaría en un error en algún momento?
Déjenme estar en desacuerdo con todas las respuestas aquí, y decir que es simplemente un error de diseño del idioma. Podrían pensar mejor. –
Esto tiende a una discusión de por qué esto es ilegal en C++ (que es subjetivo), y se ve argumentativo. Votando para cerrar. –
¿Cómo se supone que el compilador sabe que en 'A :: B' el' A' es un identificador de espacio de nombres en lugar de un nombre de clase? –