¿Cómo declaro un alias de espacio de nombres en un archivo de encabezado y luego lo uso en un archivo de origen?

Quiero poner un alias de espacio de nombres (es decir, espacio de nombres A = B :: C) en un archivo de encabezado para poder usarlo en archivos de origen, pero el compilador simplemente me dice que "no es un nombre de espacio de nombres". ¿Alguna idea?

Este es un ejemplo muy simplificado de lo que estoy tratando de hacer ...

archivo de cabecera:

namespace A{
namespace B{
int getInt();
}
}

namespace AB = A::B;

source file:

#include "header_file.h"
#include <iostream>

int AB::getInt(){ // Error "AB is not a namespace name"
return 123;
}

preguntado el 08 de noviembre de 11 a las 16:11

Supongo que hay un error en tu código. (pista: código de publicación) -

Este patrón de podría ayudar. -

Es demasiado grande. encabezado: espacio de nombres a {int a}; espacio de nombres b = a; fuente: int a = b :: a; // ¡¿error?! -

Si puede incluir el ejemplo en un comentario, @User, entonces no es demasiado grande. Edite la pregunta para incluir un ejemplo breve que demuestre su problema. Es incluso mejor si le gusta la demostración de Als y publica un enlace a la salida del compilador. -

2 Respuestas

Debe incluir el archivo que declara el espacio de nombres en el archivo de encabezado o, como dicen los comentarios, haga esto:

namespace B { namespace C { } }
namespace A = B::C;

respondido 08 nov., 11:20

o para declarar un espacio de nombres vacío justo antes de la definición de alias - Andriy Tylychko

o simplemente volver a declarar el espacio de nombres en lugar de incluirlo. - Justin

El espacio de nombres abarca varios archivos y tengo. - user965369

Eso no es un problema, el problema es que su alcance no se extiende a los archivos de origen. - user965369

@ user965369 Estoy leyendo sus problemas y voy a decir lo obvio por si acaso: el alias funcionará con este método. 1) aún tendrá que incluir los encabezados que usa donde los usa. 2) y deberá asegurarse de que el orden de inclusión sea correcto. - Justin

En el punto en el que crea el alias, el compilador ya debe haber visto el espacio de nombres con alias.

Por lo tanto, debes #include un archivo que contiene dicho espacio de nombres o debes hacer esto:

// "Forward Declaring" the namespace
namespace B { namespace C { } }

namespace A = B::C;

respondido 08 nov., 11:20

He hecho todo esto, el problema es que el alcance del alias no se incluye en el archivo fuente. - user965369

¿Ha intentado ejecutar el preprocesador sobre su archivo .cpp y ver si está sucediendo algo extraño? Tal vez tengas tu #include anidado en un espacio de nombres? - Michael Price

sí, hecho todo eso. ¿Sabes dónde puedo encontrar información sobre el alcance del archivo de alias del espacio de nombres? Gracias - user965369

@ user965369 El alcance de un alias de espacio de nombres debe ser el mismo que el de cualquier otro identificador en su código. Como han señalado otros, sería muy útil si publicara el código más pequeño posible que reproduzca su problema. - Michael Price

@ user965369 Diablos, incluso el mensaje de error real sería útil. - Michael Price

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.