my_test.hSollte eine konstante statische Variable in einer C++ Header-Datei initialisiert werden?
#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
Wenn cav der Erstellung dieser Header-Datei verwendet wird, ein Fehler 'multiple definition of 'A::b'
auftritt.
- warum ist das, wenn ich Guard Makro bereits verwendet habe?
- warum produziert
A::a
nicht die erro? (Ich kann nicht Codeconst static obj b={1,2}
inclass A
schreiben)
Für das OP, als Anfänger, ist das "Sie müssen" korrekt. Als absolute technische Aussage ist dies jedoch nicht der Fall, da es für Klassenvorlagen eine ODR-Ausnahme gibt. Das heißt technisch, wenn es wirklich notwendig ist, kann man die statische Konstante in einer Klassenvorlage definieren und dann von einer beliebigen Spezialisierung erben. Es wird manchmal als Templatestrick bezeichnet. Eine praktikablere Möglichkeit, eine Implementierungsdatei zu vermeiden, besteht darin, über eine Inline-Funktion (die die Konstante als lokal haben kann) Zugriff auf die Konstante bereitzustellen. –
@Alf: Ich stimme zu, was Ihr Kommentar sagt. In der Tat ist das eine gute Information. –