my_test.hUna variabile statica const può essere inizializzata in un file di intestazione C++?
#ifndef MY_TEST
#define MY_TEST
struct obj {
int x;
int y;
};
class A {
private:
const static int a=100;
const static obj b;
};
const obj A::b={1,2};
#endif
Quando si compila cpp utilizzando questo file di intestazione, un errore si verifica 'multiple definition of 'A::b'
.
- perché è quando uso già macro di protezione?
- perché
A::a
non produce l'errore? (Non posso scrivere codiceconst static obj b={1,2}
inclass A
)
Per l'OP, come principiante, "È necessario" è corretto. Tuttavia, come affermazione tecnica assoluta non lo è, perché esiste un'esclusione ODR per i modelli di classe. Ciò significa che tecnicamente, se ce n'è davvero bisogno, è possibile definire la costante statica in un modello di classe e quindi ereditare da una specializzazione arbitraria. A volte è conosciuto come il trucco costante basato su modelli. Un modo più pratico per evitare un file di implementazione, se lo si fa, è fornire l'accesso alla costante tramite una funzione inline (che può avere la costante come locale). ' –
@ Alf: concordo su ciò che dice il tuo commento. In effetti questa è una buona informazione. –