11

estoy muy versado en el paradigma típico de:Declarar e inicializar constante en el archivo de cabecera

//.h 
extern const int myInt; 

//.c, .m, .cpp, what have you 
const int myInt = 55; 

Pero tiene que haber una manera de poner esto en .h archivos para su uso con bibliotecas u otros casos en los que no puede acceder al archivo de implementación.

Por ejemplo, yo estoy tratando de añadir una constante NSString a un archivo .h en un proyecto de Xcode, así:

static NSString *const myString = @"my_string"; 

sin embargo, cuando intento utilizar myString, me sale el error

elemento

inicializador no es una constante

en myString de tiempo de compilación , lo que indica que no está siendo adecuadamente instanciado. ¿Cómo se declaran las constantes de tiempo de compilación en un archivo de encabezado C++ u Objecitve-C?

+0

Así se esta destinado a ser C o C++? Puede inicializar globales con expresiones de tiempo de ejecución en C++, pero no en C. –

+0

Es bueno saber que no es posible que C. Actualice las etiquetas. –

Respuesta

17

En C++, const objetos tienen enlace interno a menos que explícitamente declarado extern, así que no hay problema con poner una definición en un fichero de cabecera, tales como:

const int myInt = 55; 

Con esta definición y la primera declaración, myInt puede haber utilizado como expresión constante de enteros, como para los límites de la matriz y similares.

No puedo responder por Objective C.

+0

Eso funciona tanto en C++ como en Objective-C, ¡gracias! –

+0

@Vorac: Esto funciona en g ++ (suponiendo que en realidad está compilando el código fuente de C++). Tu edición me hizo perder tiempo para volver a verificar algo que ya era correcto e hizo que esta respuesta fuera inconsistente internamente. ¿Por qué debería decir "los objetos' const' tienen un enlace interno "y luego y un _explicit_' static' con el ejemplo? Si no está seguro acerca de algo, entonces comenten; no edite He retrocedido tu edición. –

Cuestiones relacionadas