[#1] CPP i statyczne skladowe klasy
Trafiłem na głupi problem. Normalnie zbaraniałem. :) Piszę coś tam sobie w C++. Prosta klasa, która zawiera jakieś dwie zmienne statyczne. Wszystko się kompiluje ale przy linkowaniu we wszystkich miejscach tej klasy w których operuje ona na tych statycznych zmiennych, dostaję błąd:

o/gcc-morphos-stable/MojaKlasa.o(.text+0x20a): undefined reference to `MojaKlasa::zmiennaStatyczna'

O co tutaj chodzi? Czy powinienem coś ustawić w GCC? Zupełnie nie wiem co jest grane. Przykładzik jest prosty i trudno popełnić tu gdzieś błąd. Help...

[#2] Re: CPP i statyczne skladowe klasy

@MDW, post #1

Jak masz statycznego membera klasy to w deklaracji klasy jest to tylko deklaracja tego membera, musisz umiescic go gdzies fizycznie czyli zdefiniowac. Wynika to z tego, ze taka skladowa jest dostepna globalnie dla calego zlinkowanego programu bez tworzenia jakiegokolwiek instacji obiektu jej klasy.

czyli np:

// deklaracja/definicja klasy
class CTets
{
static int m_dana; // deklaracja statycznego membera
...
CTest();
};

int CTest::m_dana = 10; // definicja memebera, juz bez slowa static


A Twój blad wlasnie wyglada tak jakbys nie zdefiniowal nigdzie w programie tej zmiennej (czyli przydzielil pamieci).



Ostatnia modyfikacja: 13.12.07 06:17



Ostatnia modyfikacja: 13.12.07 06:18



Ostatnia modyfikacja: 13.12.07 06:18
[#3] Re: CPP i statyczne skladowe klasy

@Rafael/ARMO, post #2

Wielkie dzięki za odpowiedź. Trafiłeś z dziesiątkę. Faktycznie teraz wszystko jest w porządku.

Teraz się nieco wytłumaczę, bo aż wstyd, że taki błąd zrobiłem. :) Ostatnie prawie 3 lata spędziłem przy Javie i trochę C#. Wcześniej tylko ANSI C (czyli zero obiektowości). Takie normalne C++ prawie mnie ominęło. Coś tam napisałem w C++ ale tak się złożyło, że jakoś statycznych składników klas nie używałem. :) Teraz wracając do C/C++ po okresie w Javie i C# już sobie nie wyobrażam pisać nieobiektowo więc czyste ANSI C nie wchodziło w grę. No i od razu zetknąłem się z takim formalnym problemem. :) Muszę powiedzieć, że Java i C# rozleniwiają. Człowiek szybko przyzwyczaja się do wygody. Od C++ trochę wieje archaizmem (od strony składniowej). No ale natywność to natywność. Tego jak na razie nic nie przebija. :)

Przyznam się jeszcze do czegoś. Na codzień zerkam do SymfoniiC++. Byłem przekonany, że w przykładach w tej książce zmienne statyczne nie są jeszcze raz deklarowane poza klasą. Już nawet to pisałem w komentarzu ale coś mnie tknęło i zerknąłem jeszcze raz. Kurcze, nie miałem racji. Jest dokładnie tak jak mówisz. :) Nie wiem jak ja mogłem to wcześniej przeoczyć. Widać jak uważnie analizuję przykłady. :D

Jeszcze raz dzięki za pomoc!

Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem