NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Statické atribúty

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
balaz.marek94:6.5.2016 17:16

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.5.2016 17:16
Avatar
B42P6
Člen
Avatar
Odpovídá na balaz.marek94
B42P6:6.5.2016 21:17

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í
+2,50 Kč
Řešení problému
Nahoru Odpovědět
6.5.2016 21:17
'long long long' is too long for GCC
Avatar
Odpovídá na B42P6
balaz.marek94:7.5.2016 12:07

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.5.2016 12:07
Avatar
Odpovídá na B42P6
balaz.marek94:7.5.2016 13:32

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.5.2016 13:32
Avatar
B42P6
Člen
Avatar
Odpovídá na balaz.marek94
B42P6:7.5.2016 14:40

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.5.2016 14:40
'long long long' is too long for GCC
Avatar
Odpovídá na B42P6
balaz.marek94:8.5.2016 10:56

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

 
Nahoru Odpovědět
8.5.2016 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.