my_test.hCzy zmienna statyczna const powinna zostać zainicjowana w pliku nagłówkowym 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
Kompilując CPP za pomocą tego pliku nagłówka, błąd 'multiple definition of 'A::b'
występuje.
- Dlaczego tak jest, gdy korzystam już z makra zabezpieczającego?
- dlaczego
A::a
nie produkuje erro? (Nie mogę napisać kodconst static obj b={1,2}
wclass A
)
Dla OP, jako początkującego, "Musisz" jest poprawne. Jednak jako bezwzględne oświadczenie techniczne nie jest, ponieważ istnieje wyjątek ODR dla szablonów klas. Co oznacza, że pod względem technicznym, jeśli istnieje taka potrzeba, można zdefiniować stałą statyczną w szablonie klasy, a następnie dziedziczyć z dowolnej specjalizacji. Jest to czasami określane jako szablonowy ciągły trick. Bardziej praktycznym sposobem uniknięcia pliku implementacji jest zapewnienie dostępu do stałej za pośrednictwem funkcji inline (która może mieć stałą jako lokalna). " –
@Alf: Zgadzam się na Twój komentarz. W rzeczywistości jest to dobra informacja. –