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 17:25 | IT novinky

Do prodeje (Farnell) se dostal jednodeskový počítač Tinker Board (unboxing). Jedná se o konkurenci Raspberry Pi 3 od společnosti Asus. Porovnání (jpg) těchto počítačů například na CNXSoft. Cena Tinker Boardu je 55 £.

Ladislav Hagara | Komentářů: 6
včera 14:44 | Zajímavý projekt

Byla zveřejněna pravidla hackerské soutěže Pwn2Own 2017, jež proběhne od 15. do 17. března v rámci bezpečnostní konference CanSecWes ve Vancouveru. Soutěžit se bude o více než milion dolarů v pěti kategoriích. Letos se bude útočit i na Ubuntu. Jedná se již o 10. ročník této soutěže.

Ladislav Hagara | Komentářů: 1
včera 13:33 | Nová verze

Po sedmi měsících vývoje od vydání verze 5.7 byla vydána verze 5.8 (YouTube) toolkitu Qt. Z novinek lze zmínit například Qt Lite pro vestavěná zařízení. Nově jsou plně podporovány moduly Qt Wayland Compositor (YouTube) a Qt SCXML (YouTube). Současně byla vydána verze 4.2.1 integrovaného vývojového prostředí (IDE) Qt Creator.

Ladislav Hagara | Komentářů: 1
včera 11:52 | Pozvánky

Lednový Prague Containers Meetup se koná ve čtvrtek 26. ledna 2017 od 18:00 v Apiary, Pernerova 49, Praha 8. Přijďte se podívat na přednášky o Enterprise Kubernetes a Jenkins as a code.

little-drunk-jesus | Komentářů: 0
včera 11:40 | Pozvánky

Program letošního ročníku konference Prague PostgreSQL Developer Days, která se koná již 15. a 16. února 2017 na ČVUT FIT, Thákurova 9, Praha 6, byl dnes zveřejněn. Najdete ho na stránkách konference včetně anotací přednášek a školení. Registrace na konferenci bude otevřena zítra (24. ledna) v brzkých odpoledních hodinách.

TomasVondra | Komentářů: 0
22.1. 02:20 | Zajímavý článek

David Revoy, autor open source webového komiksu Pepper&Carrot nebo portrétu GNU/Linuxu, upozorňuje na svém blogu, že nový Inkscape 0.92 rozbíjí dokumenty vytvořené v předchozích verzích Inkscape. Problém by měl být vyřešen v Inkscape 0.92.2 [reddit].

Ladislav Hagara | Komentářů: 0
22.1. 02:02 | Komunita

Øyvind Kolås, hlavní vývojář grafických knihoven GEGL a babl, které využívá grafický program GIMP, žádá o podporu na Patreonu. Díky ní bude moci pracovat na vývoji na plný úvazek. Milník 1000 $, který by stačil na holé přežití, se již téměř podařilo vybrat, dalším cílem je dosažení 2500 $, které mu umožní běžně fungovat ve společnosti.

xkomczax | Komentářů: 12
21.1. 23:54 | Pozvánky

DevConf.cz 2017, již devátý ročník jedné z největších akcí zaměřených na Linux a open source ve střední Evropě, proběhne od pátku 27. ledna do neděle 29. ledna v prostorách Fakulty informačních technologií Vysokého učení technického v Brně. Na programu je celá řada zajímavých přednášek a workshopů. Letos je povinná registrace.

Ladislav Hagara | Komentářů: 0
21.1. 22:11 | Nová verze

Byla vydána verze 1.0.0 emulátoru terminálu Terminology postaveného nad EFL (Enlightenment Foundation Libraries). Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
20.1. 17:00 | Nová verze

Byl vydán Docker 1.13. Přehled novinek na YouTube a v poznámkách k vydání na GitHubu. Docker umožňuje běh aplikací v softwarových kontejnerech (Wikipedia).

Ladislav Hagara | Komentářů: 7
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (11%)
 (2%)
 (73%)
 (3%)
 (10%)
Celkem 387 hlasů
 Komentářů: 31, poslední včera 19:19
Rozcestník
Reklama

Dotaz: static const členy C++

13.5.2009 15:57 Dušan Renát | skóre: 4
static const členy C++
Přečteno: 910×
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.