11

sto bene addentro nel tipico paradigma:dichiarare e inizializzare costante nel file di intestazione

//.h 
extern const int myInt; 

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

Ma ci deve essere un modo per metterlo in .h file per l'uso con le librerie o altri casi in cui si non può accedere al file di implementazione.

Per esempio, sto cercando di aggiungere un NSString costante in un file .h in un progetto Xcode in questo modo:

static NSString *const myString = @"my_string"; 

tuttavia, quando si tenta di utilizzare myString, ottengo l'errore

elemento

inizializzatore non è una costante

su myString tempo di compilazione , indicando che non è stato istanziato correttamente. Come si dichiarano le costanti di compilazione in un file di intestazione C++ o Objecitve-C?

+0

Quindi questo è pensato per essere C o C++? È possibile inizializzare globals con espressioni run-time in C++, ma non in C. –

+0

Buono a sapersi che non è possibile per C. Aggiornerà i tag. –

risposta

17

In C++, const oggetti hanno il collegamento interno a meno dichiarato esplicitamente extern, quindi non c'è alcun problema con mettere una definizione in un file di intestazione come:

const int myInt = 55; 

Con questa definizione e prima dichiarazione, myInt può essere usato come un'espressione costante intera come per i limiti dell'array e simili.

Non riesco a rispondere per l'obiettivo C.

+0

Che funziona sia in C++ che in Objective-C, grazie! –

+0

@Vorac: funziona in g ++ (presupponendo che si stia effettivamente compilando il codice sorgente C++). La tua modifica mi ha fatto perdere tempo ricontrollando qualcosa che era già corretto e ha reso questa risposta internamente incoerente. Perché dovrei dire "gli oggetti' const' hanno un collegamento interno "e quindi un _explicit_' static' nell'esempio? Se non sei sicuro di qualcosa allora commenta; non modificare. Ho ripristinato la modifica. –

Problemi correlati