Diskuze: Statické atribúty
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 6 zpráv z 6.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
A nezabudol si definovať statickú premennú?
Toto:
class A{};
class B
{
static A atribut;
};
len deklaruje že trieda B bude mať statický atribút a typu A . Nedefinuje ho (nevytvára ho), na to aby si ho definoval musíš použiť:
class A{};
class B
{
static A atribut;
};
A B::atribut; /*Toto definuje(vytvorí) statickú premennú,
nemusí to byť v rovnakom zdrojovom súbore ako trieda */
Práve že ani to mi nefunguje, zjednodušil som si to a použil som dátový typ int miesto smerníka na triedu, zadefinoval som ho tak, ako si popísal vyššie, avšak furt mi vyhadzuje chybu :/
Nakoniec bola chyba v tom, že súbor som mal súbor Main.cpp a v ňom som volal main, ale akonáhle som ho premiestni do súboru Volby.cpp (tam, kde som mal statickú premennú), tak mu to nevadilo
Dôvod prečo sa definujú statické premenné takto, je že ak by si ju definoval vo vnútri triedy (v header file), tak tým že sa tento header file (hlavičkový súbor) kopíruje do každého zdrojóveho súboru (tam kde je zdroják), pri kompilácii, by sa compiler nevedel rozhodnúť ktorú definíciu použiť, (aj napriek tomu že by boli rovnaké), porušuješ ODR (One Definition Rule), ty si ho dal definíciu do hlavičkového súboru Volby.h, takže tým že si Volby.h skopíroval do viacerých súborov, porušil si ODR. Akonáhle premiestniš definíciju tejto statickej premennej do zdrojového súboru (maximálne do jedného), je to fajn.
Zobrazeno 6 zpráv z 6.