Avatar
balaz.marek94:

Zdravím, v C++ som tak povediac začiatočník. Robím úlohu do školy a potreboval by som pomôcť pri práci so statickým atribútom. Mám vytvorený statický atribút ako private v jednej triede a v druhej triede ho chcem meniť cez statický setter, syntax mi nevypisuje chybu, avšak pri debugovaní sa vypíše neznáma chyba. Vedel by mi niekto poradiť? :)

 
Odpovědět 6. května 17:16
Avatar
B42P6
Člen
Avatar
Odpovídá na balaz.marek94
B42P6:

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 */
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 6. května 21:17
'long long long' is too long for GCC
Avatar
Odpovídá na B42P6
balaz.marek94:

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 :/

 
Nahoru Odpovědět 7. května 12:07
Avatar
Odpovídá na B42P6
balaz.marek94:

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 :)

 
Nahoru Odpovědět 7. května 13:32
Avatar
B42P6
Člen
Avatar
Odpovídá na balaz.marek94
B42P6:

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.

Nahoru Odpovědět 7. května 14:40
'long long long' is too long for GCC
Avatar
Odpovídá na B42P6
balaz.marek94:

Vďaka! to som nevedel :) Nabudúce už budem múdrejší

 
Nahoru Odpovědět 8. května 10:56
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.