abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

    včera 20:33 | Komunita

    Na Kickstarteru byla spuštěna crowdfundingová kampaň na podporu telefonu Murena 2 s /e/OS. Telefon má 2 hardwarové přepínače. Prvním lze jednoduše vypnout kamery a mikrofony. Druhým se lze odpojit od sítí.

    Ladislav Hagara | Komentářů: 1
    včera 20:11 | Bezpečnostní upozornění

    Společnost Qualcomm publikovala říjnový bezpečnostní bulletin. V úvodu informuje, že bezpečnostní chyby CVE-2023-33106, CVE-2023-33107, CVE-2022-22071 a CVE-2023-33063 jsou cíleně využívány útočníky. O CVE-2022-22071 se píše už v loňském květnovém bulletinu. Detaily o zbylých chybách jsou k dispozici OEM partnerům. Veřejně budou k dispozici až s vydáním prosincového bulletinu.

    Ladislav Hagara | Komentářů: 0
    včera 13:55 | Nová verze

    Byla vydána nová verze 5.18 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Tor Browser byl povýšen na verzi 12.5.6. Tor na verzi 0.4.8.6.

    Ladislav Hagara | Komentářů: 0
    včera 10:55 | Nová verze

    Šifrovací nástroj VeraCrypt v menším vydání 1.26.7 nejen opravuje chyby a aktualizuje podporované algoritmy (podrobnosti v poznámkách vydání), ale také přestává podporovat původní svazky TrueCrypt.

    Fluttershy, yay! | Komentářů: 0
    včera 09:00 | Pozvánky

    V sobotu 7. října proběhne Maker Faire Liberec, festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí.

    Ladislav Hagara | Komentářů: 0
    včera 08:00 | Zajímavý článek Ladislav Hagara | Komentářů: 0
    2.10. 23:44 | Komunita

    Ubuntu Summit 2023 proběhne od 3. do 5. listopadu v Rize.

    Ladislav Hagara | Komentářů: 0
    2.10. 19:33 | Nová verze

    Programovací jazyk Python byl vydán v nové major verzi 3.12.0. Podrobný přehled novinek v Changelogu.

    Ladislav Hagara | Komentářů: 0
    2.10. 17:00 | Zajímavý projekt

    Linux ve Scratchi. Ne Linux v linuxové distribuci Linux From Scratch, ale Linux bežící v emulátoru procesoru RISC-V ve vizuálním programovacím jazyce Scratch.

    Ladislav Hagara | Komentářů: 0
    2.10. 16:22 | Pozvánky

    Dnes ve 12 hodin začal další ročník CTF (Capture the Flag) soutěže The Catch: "Tentokrát nás kolegové z Forenzní laboratoře zavedou na loď plnou sofistikovaných síťových technologiích, kde soutěžící budou muset zvládnout náročné úkoly. Loď nese jméno našeho skvělého kolegy Josefa Vericha – síťového guru. Tradičně se soutěž koná v říjnu – měsíci kybernetické bezpečnosti."

    Ladislav Hagara | Komentářů: 1
    Raději
     (55%)
     (45%)
    Celkem 51 hlasů
     Komentářů: 3, poslední 2.10. 23:31
    Rozcestník

    Dotaz: static const členy C++

    13.5.2009 15:57 Dušan Renát | skóre: 4
    static const členy C++
    Přečteno: 935×
    Mám třídu, ve které bych chtěl vícero položek ve stylu:
    static const char INFO = 'I';
    Pokud to správně chápu, jsou dvě možnosti:
    1) Už v samotné třídě inicializovat stylem napsaným výše.
    2) Ve třídě psát jen deklarace ve stylu
    static const char INFO;
    a v cpp souboru potom doplnit
    const char INFO = 'I';
    Nefunguje mi ani jedna z možností. V případě 1) dochází k chybám při linkování typu
    /planner.cpp:45: undefined reference to `Action::INFO'
    V případě druhém hází chybu ostatní jednotky, do kterých hlavičkový soubor dotyčné třídy includuju, konkrétně
     error: ‘Action::INFO’ cannot appear in a constant-expression
    v příkazu switch jako větvící hodnoty.
    Jak se tedy dají použít static const členy třídy, aby jednak neházely chyby při linkování, jednak se daly použít i ve switchi? Díky za každou pomoc.

    Odpovědi

    13.5.2009 16:16 volca
    Rozbalit Rozbalit vše Re: static const členy C++

    Nejsou ty chybove hlasky prohozene?

    Spravne reseni je v cpp souboru mit

    const char Trida::INFO = 'I';

     

    a linkovat vysledny objektovy soubor ke vsem ktere includuji header.

    13.5.2009 16:33 Dušan Renát | skóre: 4
    Rozbalit Rozbalit vše Re: static const členy C++
    Přesně tak to mám a dělám, a řve to, že tu proměnnou INFO nemůžu použít ve switchi.
    13.5.2009 17:34 volca
    Rozbalit Rozbalit vše Re: static const členy C++

    To bude nejspis tim ze switch nejde pouzit na neco co se neda overit pri kompilaci (on tu hodnotu bude znat az pri linkovani, zejo).

    Ta staticka hodnota rovnou v header souboru byva problem kvuli tomu, ze potom existuje tolik instanci te staticke promenne, kolik je uspesnych include toho kodu.

     

    Nezbyva nez bud pouzit ten enum nebo to udelat #define direktivou - kazdopadne ale v hlavickovym souboru.

    13.5.2009 16:17 petris_ | skóre: 12
    Rozbalit Rozbalit vše Re: static const členy C++
    U konstant se automaticky doplnuje static, takze kdyz ji umistite do cpp souboru, tak je pristupna jen v tom souboru, kde je definovana. Pokud to tak nechcete, musite explicitne uvest extern.

    Z toho, co jste popsal, mi vychazi jako lepsi reseni pouziti vnoreneho typu enum.
    13.5.2009 16:23 volca
    Rozbalit Rozbalit vše Re: static const členy C++

    Vazne se u const doplnuje pro clenske promenne static? To se mi nejak nezda :/. Imho const clenske promenne maji jediny rozdil - lze je inicializovat pouze v inicializacnim bloku konstruktoru, a v kodu je lze pouzit pouze v const kontextu.

     

    S navrhem pouzit enum souhlasim :)

    13.5.2009 16:29 petris_ | skóre: 12
    Rozbalit Rozbalit vše Re: static const členy C++
    V tom cpp souboru mate:

    const char foo = 'F';

    const se implicitne linkuje jako static, takze je to stejne, jako byste napsal:

    static const foo = 'F';

    Proto to pri linkovani napise chybu. Duvod proc to tak je, je abyste mohl psat konstanty do hlavickovych souboru, jakasi nahrada za:

    #define foo 'F'

    13.5.2009 16:34 Dušan Renát | skóre: 4
    Rozbalit Rozbalit vše Re: static const členy C++
    Enum se dá takto použít i pro znaky? Já myslel, že jen pro celý čísla (protože ten výčet tak interně ukládá).
    13.5.2009 16:39 petris_ | skóre: 12
    Rozbalit Rozbalit vše Re: static const členy C++
    enum e {
    	INFO = 'I' // atd...
    };
    13.5.2009 16:45 Dušan Renát | skóre: 4
    Rozbalit Rozbalit vše Re: static const členy C++
    Každopádně, co je přesně špatně na tom, že includuju header ve stylu
    class Trida {
    static const INFO = 'I';
    ...
    
    do všech cpp, kde to používám? To by mělo být správně, ne? Co je na tom přesně špatně? Nějak se mi nechce věřit, že bych ještě navíc potřeboval extern.
    13.5.2009 16:46 Dušan Renát | skóre: 4
    Rozbalit Rozbalit vše Re: static const členy C++
    Oprava:
    static const char INFO = 'I';
    13.5.2009 18:53 vencas | skóre: 32
    Rozbalit Rozbalit vše Re: static const členy C++

    Statická proměnná musí být někde v paměti, proto je třeba ji vytvořit v právě jednom .cpp souboru a tam ji i inicializovat. Jinak by různé soubory includující stejný header nevěděly, kdo ji teda mám ve své paměti.

    Jestli to chcete za každou cenu mít jen v .hpp, tak si to definujte jako metodu: const char getINFO(void){ return 'I'; }, to se pak už nikde definovat nemusí, bude z toho inline funkce.

    13.5.2009 16:56 Dušan Renát | skóre: 4
    Rozbalit Rozbalit vše Re: static const členy C++
    Tímhle způsobem se to neudělá namapovaný na znaky, jen na čísla s hodnotami těch znaků. Což má hlavně tu nevýhodu, že to nemůžu přesměrovat do streamu pro vypsání jako znak, ne bez přetypování na znak.
    13.5.2009 17:07 petris_ | skóre: 12
    Rozbalit Rozbalit vše Re: static const členy C++
    To umi vyresit pretizeny operator.

    Pokud mi neverite s tim linkovanim, tak si to zkuste nebo si sezente referencni prirucku k c++.
    13.5.2009 17:12 Dušan Renát | skóre: 4
    Rozbalit Rozbalit vše Re: static const členy C++
    Jestli věřím, že to takhle nefunguje? Věřím, vždyť to vidím :) Nebo nevím, na co se ptáte, jestli věřím.

    Mluvím o tom ... ano, enum je řešení, s přetíženým operátorem na výpis i kompletní řešení bez nevýhod. Přesto bych se rád dozvěděl, proč nefunguje to původní řešení (ta původní dvě řešení), čistě ze zájmu.
    13.5.2009 19:43 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: static const členy C++
    Příloha:
    Mohl byste prihodit kompletni kus kodu, ktery vam nefunguje? Mne se priklad v priloze kompiluje bez problemu.
    13.5.2009 22:17 Dušan Renát | skóre: 4
    Rozbalit Rozbalit vše Re: static const členy C++
    Moc díky za všechny reakce, odpověď jsem si z nich vybral.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.