Abcc napisał(a)
Po to, żeby ta dana składowa była traktowana jako normalny obiekt ( choćby możliwość pobrania adresu), a nie jak stała całkowita z listy wyliczeniowej. Bez definicji poza ciałem klasy taka statyczna dana składowa jak u mnie w programie byłaby zrealizowana przez kompilator w ten sposób jak stała całkowita z listy wyliczeniowej.
Ale nadal mialaby swoj pobieralny adres, typu const int*/&, ot, mozliwe ze inny w kazdym pliku .cpp
O ile dobrze pamietam, przy polach static-const-integral niezalecane jest wlasnoreczne podawanie fizycznej lokalizacji zmiennej (tzn. definiowanie explicite jej w jakims jednym .cpp) - pozostawia sie to wlasnie kompilatorowi, ktory te lokalizacje wybierze na podstawie Twoich pobieran adresow, użyc zmiennych, funkcjach, etc.
Poza tym, to że sobie ja gdzieś przygwoździłes tą definicja w pliku .cpp, NIE znaczy ze kompilator NIE potraktuje jej jako stała i NIE skopiuje wartościowo w miejscach użyc. w dalszym ciagu moze sobie ja pokopiowac dowolna ilosc razy.*) const czasu kompilacji, to const czasu kompilacji.. *)
wracajac do problemu: racz podac ten blad, ok?
jezeli jest to ze symbol jest zdefiniowany dwa razy - to pewnie z tego powodu co powiedzialem powyzej.. ale to by sugerowalo ze masz walniety kompilator, ktory nie patrzy co juz jest zdefiniowane i probuje na chama uzyc automatycznego umiejscawiania definicji pola..
edit: *) przypomniałem sobie "conceptual constness" i zwatpiłem. lepiej sprawdzic na swoim kompilatorze jak jego autorzy ten termin rozumieli