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 13:33 | Bezpečnostní upozornění

    Specialisté společnosti ESET zaznamenali útočnou kampaň, která cílí na uživatele a uživatelky v Česku a na Slovensku. Útočníci po telefonu zmanipulují oběť ke stažení falešné aplikace údajně od České národní banky (ČNB) nebo Národní banky Slovenska (NBS), přiložení platební karty k telefonu a zadání PINu. Malware poté v reálném čase přenese data z karty útočníkovi, který je bezkontaktně zneužije u bankomatu nebo na platebním terminálu.

    Ladislav Hagara | Komentářů: 6
    dnes 13:22 | Upozornění

    V Ubuntu 25.10 byl balíček základních nástrojů gnu-coreutils nahrazen balíčkem rust-coreutils se základními nástroji přepsanými do Rustu. Ukázalo se, že nový "date" znefunkčnil automatickou aktualizaci. Pro obnovu je nutno balíček rust-coreutils manuálně aktualizovat.

    Ladislav Hagara | Komentářů: 1
    dnes 04:55 | Komunita

    VST 3 je nově pod licencí MIT. S verzí 3.8.0 proběhlo přelicencování zdrojových kódů z licencí "Proprietary Steinberg VST3 License" a "General Public License (GPL) Version 3". VST (Virtual Studio Technology, Wikipedie) je softwarové rozhraní pro komunikaci mezi hostitelským programem a zásuvnými moduly (pluginy), kde tyto moduly slouží ke generování a úpravě digitálního audio signálu.

    Ladislav Hagara | Komentářů: 1
    dnes 03:22 | Nová verze

    Open source 3D herní a simulační engine Open 3D Engine (O3DE) byl vydán v nové verzi 25.10. Podrobný přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 20:11 | Komunita

    V Londýně probíhá dvoudenní Ubuntu Summit 25.10. Na programu je řada zajímavých přednášek. Zhlédnout je lze také na YouTube (23. 10. a 24. 10.).

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

    Gemini CLI umožňuje používání AI Gemini přímo v terminálu. Vydána byla verze 0.10.0.

    Ladislav Hagara | Komentářů: 0
    včera 12:55 | Pozvánky

    Konference OpenAlt 2025 proběhne již příští víkend 1. a 2. listopadu v Brně. Nabídne přibližně 80 přednášek a workshopů rozdělených do 7 tematických tracků. Program se může ještě mírně měnit až do samotné konference, a to s ohledem na opožděné úpravy abstraktů i případné podzimní virózy. Díky partnerům je vstup na konferenci zdarma. Registrace není nutná. Vyplnění formuláře však pomůže s lepším plánováním dalších ročníků konference.

    Ladislav Hagara | Komentářů: 0
    včera 05:33 | IT novinky

    Samsung představil headset Galaxy XR se 4K Micro-OLED displeji, procesorem Snapdragon XR2+ Gen 2, 16 GB RAM, 256 GB úložištěm, operačním systémem Android XR a Gemini AI.

    Ladislav Hagara | Komentářů: 2
    včera 05:22 | Nová verze

    Před konferencí Next.js Conf 2025 bylo oznámeno vydání nové verze 16 open source frameworku Next.js (Wikipedie) pro psaní webových aplikací v Reactu. Přehled novinek v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    22.10. 23:33 | Komunita

    Sovereign Tech Fund oznámil finanční podporu následujících open source projektů: Scala, SDCC, Let's Encrypt, Servo, chatmail, Drupal, Fedify, openprinting, PHP, Apache Arrow, OpenSSL, R Project, Open Web Docs, conda, systemd a phpseclib.

    Ladislav Hagara | Komentářů: 0
    Jaké řešení používáte k vývoji / práci?
     (36%)
     (48%)
     (20%)
     (20%)
     (24%)
     (18%)
     (21%)
     (18%)
     (18%)
    Celkem 267 hlasů
     Komentářů: 14, poslední 14.10. 09:04
    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.