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í
×
    dnes 19:44 | Nová verze

    Byla vydána nová major verze 5.0 svobodného 3D softwaru Blender. Přehled novinek i s náhledy a videi v obsáhlých poznámkách k vydání. Videopředstavení na YouTube.

    Ladislav Hagara | Komentářů: 0
    dnes 14:00 | Upozornění

    Cloudflare, tj. společnost poskytující "cloudové služby, které zajišťují bezpečnost, výkon a spolehlivost internetových aplikací", má výpadek.

    Ladislav Hagara | Komentářů: 5
    dnes 04:22 | Pozvánky

    Letos se uskuteční již 11. ročník soutěže v programování Kasiopea. Tato soutěž, (primárně) pro středoškoláky, nabízí skvělou příležitost procvičit logické myšlení a dozvědět se něco nového ze světa algoritmů – a to nejen pro zkušené programátory, ale i pro úplné začátečníky. Domácí kolo proběhne online od 22. 11. do 7. 12. 2025 a skládá se z 9 zajímavých úloh různé obtížnosti. Na výběru programovacího jazyka přitom nezáleží – úlohy jsou

    … více »
    SoutezKasiopea | Komentářů: 1
    dnes 04:11 | Nová verze

    Byla vydána nová verze 2.52.0 distribuovaného systému správy verzí Git. Přispělo 94 vývojářů, z toho 33 nových. Přehled novinek v příspěvku na blogu GitHubu a v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 18:00 | Nová verze

    VKD3D-Proton byl vydán ve verzi 3.0. Jedná se fork knihovny vkd3d z projektu Wine pro Proton. Knihovna slouží pro překlad volání Direct3D 12 na Vulkan. V přehledu novinek je vypíchnuta podpora AMD FSR 4 (AMD FidelityFX Super Resolution 4).

    Ladislav Hagara | Komentářů: 0
    včera 03:11 | Nová verze

    Poštovní klient Thunderbird byl vydán v nové verzi 145.0. Podporuje DNS přes HTTPS nebo Microsoft Exchange skrze Exchange Web Services. Ukončena byla podpora 32bitového Thunderbirdu pro Linux.

    Ladislav Hagara | Komentářů: 2
    včera 02:33 | IT novinky

    U příležitosti státního svátku 17. listopadu probíhá na Steamu i GOG.com již šestý ročník Czech & Slovak Games Week aneb týdenní oslava a také slevová akce českých a slovenských počítačových her.

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

    Byla vydána nová verze 9.19 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání. Vypíchnout lze například nový balíček BirdNET-Go, tj. AI řešení pro nepřetržité monitorování a identifikaci ptáků.

    Ladislav Hagara | Komentářů: 0
    16.11. 02:22 | Nová verze

    Byla vydána nová verze 3.38 frameworku Flutter (Wikipedie) pro vývoj mobilních, webových i desktopových aplikací a nová verze 3.10 souvisejícího programovacího jazyka Dart (Wikipedie).

    Ladislav Hagara | Komentářů: 0
    16.11. 01:33 | Nová verze

    Organizace Apache Software Foundation (ASF) vydala verzi 28 integrovaného vývojového prostředí a vývojové platformy napsané v Javě NetBeans (Wikipedie). Přehled novinek na GitHubu. Instalovat lze také ze Snapcraftu a Flathubu.

    Ladislav Hagara | Komentářů: 0
    Jaké řešení používáte k vývoji / práci?
     (35%)
     (46%)
     (19%)
     (18%)
     (23%)
     (15%)
     (23%)
     (16%)
     (16%)
    Celkem 367 hlasů
     Komentářů: 16, poslední 12.11. 18:21
    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: 967×
    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.