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 11:55 | Komunita

Vývojový tým OpenSSL ve spolupráci s iniciativou Core Infrastructure konsorcia Linux Foundation spustil proces přelicencování této kryptografické knihovny ze současné licence na licenci Apache Licence v 2.0 (ASLv2). Nová licence usnadní začleňování OpenSSL do dalších svobodných a open source projektů. Všichni dosavadní vývojáři OpenSSL (Authors) obdrží v následujících dnech email s prosbou o souhlas se změnou licence.

Ladislav Hagara | Komentářů: 6
včera 01:11 | Komunita

Před třemi týdny Mozilla.cz představila projekt Photon, jehož cílem je návrh a implementace nového vzhledu Firefoxu. Včera zveřejnila první náhled vzhledu Photon. Práce na projektu Photon jsou rozděleny do pěti týmů, které celkem čítají 19 lidí. Zaměřují se na zlepšení prvního spuštění Firefoxu a zaujetí nových uživatelů, celkovou úpravu vzhledu, zlepšení animací, zrychlení odezvy uživatelského rozhraní a také upravení nabídek. Vývoj lze sledovat v Bugzille.

Ladislav Hagara | Komentářů: 14
23.3. 20:00 | Komunita

OneDrive pro firmy je již ve webových prohlížečích na Linuxu stejně rychlý jako na Windows. Microsoft opravil chybu z listopadu loňského roku. OneDrive pro firmy běžel na Linuxu mnohem pomaleji než na Windows. V popisu chyby bylo uvedeno, že stačilo v prohlížeči na Linuxu nastavit v user-agentu Windows a vše se zrychlilo. Odpovědí Microsoftu bylo (Internet Archive: Wayback Machine), že Linux není podporován. Po bouřlivých diskusích na redditu i Hacker News byla chyba nalezena a opravena.

Ladislav Hagara | Komentářů: 4
23.3. 19:00 | Zajímavý projekt

Byla vyhlášena soutěž Hackaday Prize 2017. Soutěž je určena vývojářům open source hardwaru. Pro výherce je připraveno celkově 250 tisíc dolarů. Každý ze 120 finalistů získá tisíc dolarů. Nejlepší pak navíc 50, 30, 20, 15, 10 a 5 tisíc dolarů. Jedná se již o čtvrtý ročník soutěže. V roce 2014 zvítězil projekt globální sítě open source pozemních satelitních stanic SatNOGS. V roce 2015 zvítězil open source systém pro řízení elektrických invalidních vozíků pohybem očí Eyedriveomatic. V roce 2016 zvítězil modulární robot Dtto.

Ladislav Hagara | Komentářů: 0
23.3. 15:00 | Bezpečnostní upozornění

Byla vydána Samba ve verzích 4.6.1, 4.5.7 a 4.4.12. Řešen je bezpečnostní problém CVE-2017-2619. Pomocí symbolických odkazů a souběhu (symlink race) lze "teoreticky" získat přístup k souborům, které nejsou sdíleny. Linuxové distribuce jsou postupně aktualizovány (Debian).

Ladislav Hagara | Komentářů: 0
23.3. 07:43 | Nová verze

Na Steamu se objevil port hry Arma: Cold War Assault (Operation Flashpoint) pro Mac a Linux. … více »

creon | Komentářů: 29
23.3. 05:55 | Nová verze

Po 18 měsících od vydání verze 8.0 byla vydána verze 9.0 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab. Představení nových vlastností v příspěvku na blogu a na YouTube.

Ladislav Hagara | Komentářů: 0
23.3. 03:33 | Komunita

Platnost posledního patentu souvisejícího s Dolby Digital (AC-3) vypršela. Po MP3 se tak do Fedory oficiálně dostane také kodek AC-3.

Ladislav Hagara | Komentářů: 5
23.3. 00:44 | Komunita

Feral Interactive, společnost zabývající se vydáváním počítačových her pro operační systémy macOS a Linux, nabízí své hry na Steamu vývojářům open source 3D grafické knihovny Mesa zdarma. Podmínkou je minimálně 25 commitů za posledních 5 let. Stejnou nabídku dostali vývojáři knihovny Mesa v roce 2015 od Valve. O rok dříve dostali od Valve tuto nabídku vývojáři Debianu a Ubuntu.

Ladislav Hagara | Komentářů: 0
22.3. 23:55 | Nová verze

Opera 44, verze 44.0.2510.857, byla prohlášena za stabilní. Nejnovější verze tohoto webového prohlížeče je postavena na Chromiu 57. Z novinek vývojáři Opery zdůrazňují podporou Touch Baru na nejnovějších MacBoocích Pro (gif). Přehled novinek pro vývojáře na blogu Dev.Opera.

Ladislav Hagara | Komentářů: 1
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (14%)
 (2%)
 (72%)
 (3%)
 (10%)
Celkem 926 hlasů
 Komentářů: 72, poslední 1.3. 11:16
    Rozcestník

    Dotaz: C++: Předávání objektu do funkce

    15.3.2009 20:06 Eregon | skóre: 22 | blog: Eregonovy_vymysly | Všudezdejší
    C++: Předávání objektu do funkce
    Přečteno: 1354×
    Zdravím všechny, mám takovej tuze hloupej dotaz. Jak se v C++ předává do nějaké funkce objekt určité třídy (je to moje vlastní třída)?

    Mám třídy T1 a T2, přičemž v T1 je metoda(T2 &objekt). No a při různých snahách dostat ten kód do funkčního stavu dostávám nejrůznější podivné chyby při kompilaci.

    Zkoušel jsem několik různých variací na tohle téma a chyby byly tak podivné a od pohledu s problémem nesouvisející, že jsem došel k názoru, že na to nejspíš jdu úplně od začátku blbě.

    Proto se chci nejdřív zeptat úplně obecně - jak na to? Přesněji: jak by měla být definována třída, jejíž objekt se pak předává jako argument funkci, a jak potom správně zapsat deklaraci té funkce? Ideálně tak, aby to fungovalo stejně, jako když do funkce předávám třeba objekt typu string nebo ifstream/ofstream).

    Předem díky za všechny rady.
    ~ w w w w (oo)   [oo] w w w w ~

    Odpovědi

    microcz avatar 15.3.2009 20:33 microcz | skóre: 18 | blog: Michalův zápisník | Praha
    Rozbalit Rozbalit vše Re: C++: Předávání objektu do funkce

    ahoj jdes na to spravne, chybka bude asi nekde schovana v kodu, ktery jsi sem nenapsal, to co jsi napsal predava referenci na objekt T2, je to tedy parametr predavany odkazem, pokud se jedna o nedynamickou instanci, kterou chces predavat hodnotou, muzes pouzit normalni metoda(T2 objekt) ... tedy treba

    class T1 {

    void metoda(T2 objekt) { ... }; // hodnotou

    void metoda(T2 &objekt) { ... }; // preda nedynamickou instanci odkazem

    void metoda(T2 *objekt) { ... }; // preda ukazatel hodnotou, tedy dynamicky vytvoreny objekt odkazem

    };

    obecne, nejsou zadna omezeni, odkazem muzes predat jakoukoliv tridu....pokud chces predavat hodnotou, napada me jen jedno omezeni, dana trida od ktere je objekt odvozen nesmi byt abstraktni (nesmi obsahovat rize virtualni metody ani dedit nedodefimovane rize virtualni metody)

     

     

    16.3.2009 01:01 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: C++: Předávání objektu do funkce
    Tomu nějak nerozumím. Proč bych nemohl dynamicky vytvořenou instanci předat referencí nebo naopak staticky vytvořenou instanci pomocí ukazatele? Vůbec je to celé zmatené. :-) Třeba
    pokud chces predavat hodnotou, napada me jen jedno omezeni, dana trida od ktere je objekt odvozen nesmi byt abstraktni
    -- abych mohl předávat instanci jako parametr nějaké metodě, logicky přece nemůže být třída dané instance abstraktní, jelikož jsem ji přece *instancioval* :-)
    microcz avatar 16.3.2009 07:54 microcz | skóre: 18 | blog: Michalův zápisník | Praha
    Rozbalit Rozbalit vše Re: C++: Předávání objektu do funkce

    achjo clovicku, neni to zmatene, poradne si to prectete....

    1) ja NEPISU ze nemuze!!! ..jen je to ponekud kostrbate pro jednoduchy projektit o dvou tridach. Samozrejme ze predavat dynamickou promennou referenci je uplne bezne, dokonce casto, pokud se u projektu pracuje s rozsahlimi objekty, voli se parametry metod jako konstantni, predavane referenci, kdezto instance se vytvareji dynamicky

    2) nemuze, ale ta instance v momente deklarovani metody s velkou pravdepodobnosti NEEXISTUJE, tedy neprojde to pres onu deklaraci metody

    3) kdyz uz jsme u toho slovickareni se slovem staticky bych si tolik nezahraval, pouzival bych radeji dynamicky/nedynamicky nebo alokovany na halde/ alokovany na zasobniku , protoze pod statickou instanci si lze predstavit, jak jiste vite ledaccos

     

    16.3.2009 12:50 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: C++: Předávání objektu do funkce
    Jen jsem se podivil nad tím, jestli je dobré, když chci člověku poradit, neříct mu celou pravdu, nic víc. ;-) Třeba mě jako začátečníka by to asi zmátlo. :-)
    microcz avatar 16.3.2009 17:34 microcz | skóre: 18 | blog: Michalův zápisník | Praha
    Rozbalit Rozbalit vše Re: C++: Předávání objektu do funkce

    sorry, myslel jsem ze chce obecne vedet zda existuje omezeni pro parametry metod, pak se stejne ukazalo, ze slo o cross-include, takze jsi mel vlastne pravdu s tim ze kod napovi

    16.3.2009 01:56 Messa | skóre: 39 | blog: Messa
    Rozbalit Rozbalit vše Re: C++: Předávání objektu do funkce

    obecne, nejsou zadna omezeni, odkazem muzes predat jakoukoliv tridu....pokud chces predavat hodnotou, napada me jen jedno omezeni, dana trida od ktere je objekt odvozen nesmi byt abstraktni (nesmi obsahovat rize virtualni metody ani dedit nedodefimovane rize virtualni metody)

    To je... nějak divně napsané. Nevím, jakou roli by v tom mohly hrát virtuální metody, ani jak vypadá ne-ryze virtuální metoda. Jinak odkazem se dají předávat samozřejmě i dynamické instance. Ono vůbec o C++ si bude lepší přečíst nějakou pořádnou knížku, třeba od Stroustrupa, než sbírat moudra po webu.

    Když se předává hodnotou, musí se dát pozor, aby funkce (metoda) nepřijímala jen předka instance, kterou ji chceš předat. Ty data, která jsou v instanci "navíc" oproti tomu předkovi by mohly zmizet. Je to ten samý důvod, proč zachytávat výjimky odkazem a proč do STL kontejnerů nedávat přímo objekty různých odvozených tříd. Asi by to mělo i vyprodukovat nějaký warning, ale teď v noci to zkoušet nebudu...

    microcz avatar 16.3.2009 08:21 microcz | skóre: 18 | blog: Michalův zápisník | Praha
    Rozbalit Rozbalit vše Re: C++: Předávání objektu do funkce

    mas pravdu, to je dobry postreh, to me nenapadlo ...btw: ja pisu hodne shared library, ktere casto obsahujou tridy, ktere budou pouzivany "zvenci" v pripade napriklad nejakeho obecneho, abstraktniho rendereru, s vetsim pocet rize virtualnich metod se mi semtam stane ze zapomenu v jeho potomkovi nejakou dodefinovat, predam jeho instanci hodnotou (ale instance bude fyzicky deklarovana az v aplikaci pouzivajici knihovnu), tak proto me to napadlo a psal jsem o tom, samozrejme pred prekladem to zarve, takze zadnej kolosalni problem

    16.3.2009 14:35 Lukas Lipavsky | skóre: 8
    Rozbalit Rozbalit vše Re: C++: Předávání objektu do funkce

     

    obecne, nejsou zadna omezeni, odkazem muzes predat jakoukoliv tridu....pokud chces predavat hodnotou, napada me jen jedno omezeni, dana trida od ktere je objekt odvozen nesmi byt abstraktni (nesmi obsahovat rize virtualni metody ani dedit nedodefimovane rize virtualni metody)

    Asi bych jeste dodal (jestli si to dobre pamatuju), ze je potreba, aby mela ta trida copy constructor (ano muze byt i defaultni, ale to obcas neni to co chcete)...

    15.3.2009 20:34 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: C++: Předávání objektu do funkce
    Co takhle poslat kód, který ti nefungoval? :-) Rozhodně je jednodušší opravit ti konkrétní chyby než odpovídat na obecné dotazy.
    16.3.2009 04:06 Eregon | skóre: 22 | blog: Eregonovy_vymysly | Všudezdejší
    Rozbalit Rozbalit vše Re: C++: Předávání objektu do funkce
    Hmm, tak až tak hloupý nejsem. Dobrá tedy, když jsem v principu postupoval správně, je čas na konkrétní kódy (měl jsem za to, že to musím mít tak blbě, že je lépe vzít to načisto).

    Tuším, že nějaký problém potom musí být ve způsobu, jakým mám ty třídy rozházené do souborů, resp. jak mám ty soubory spojené.

    Takže pro každou třídu mám samostatné soubory, tzn. mám T1.h, T1.cpp, T2.h a T2.cpp, přičemž klasicky .h soubor obsahuje definici třídy a .cpp obsahuje implementace metod.

    Soubor T1.h vypadá takhle (pro přehlednost jsem odstranil nepodstatné části definice):
    #ifndef T1_H
    #define T1_H
    
    #include <systemove_knihovny>
    
    #include "T2.h"
    
    
    
    class T1 {
    
      nejake vlastnosti;
    
      public:
        T1();
        ~T1();
    };
    
    #endif
    
    A soubor T2.h vypadá takhle:
    #ifndef T2_H
    #define T2_H
    
    #include <kni.h.ovny>
    
    #include "T1.h"
    
    class T2 {
    
      nejake vlastnosti;
    
      public:
        T2();
        T2(T1 &t1); // TADYTEN ŘÁDEK DĚLÁ PROBLÉM
        T2(int i1, int i2, int i3, int i4, bool b1 = false, bool b2 = true);
        T2(int i1, int i2, bool b1 = false, bool b2 = true);
        ~T2();
    
        dalsi metody();
        ...
    };
    
    #endif
    
    Pokud se toto pokusím zkompilovat, dostanu error: expected `)' before ‘&’ token na řádku, který jsem označil komentářem (tzn. přímo toto, bez ohledu na to, jestli je implementace v .cpp souboru hotová nebo ne. Stejně se to chová i při pass-by-address nebo obyčejném pass-by-value.
    ~ w w w w (oo)   [oo] w w w w ~
    16.3.2009 04:09 Eregon | skóre: 22 | blog: Eregonovy_vymysly | Všudezdejší
    Rozbalit Rozbalit vše Re: C++: Předávání objektu do funkce
    Hmmmmm, jak to tak bývá, stačí se donutit někomu pořádně vysvětlit problém a řešení se objeví samo...

    Stačilo do deklarace funkce místo T1 &t1 dát class T1 &t1.

    Což mě ovšem překvapuje - měl jsem za to, že v C++ se název třídy bere jako název typu - při vytváření proměnných to tak funguje, proč to je v deklaraci funkce jinak?
    ~ w w w w (oo)   [oo] w w w w ~
    microcz avatar 16.3.2009 08:44 microcz | skóre: 18 | blog: Michalův zápisník | Praha
    Rozbalit Rozbalit vše Re: C++: Předávání objektu do funkce

    podle meho nazoru to mozna mohlo byt tim,  ze jsi includoval T1.h v T2.h a obracene T2.h v T1.h, pokud si pamatuji pri takovymhle krizovym include byva problem s rozpoznanim typu, resenim je pouzit v jednom z h souboru Doprednou deklaraci, napriklad v T2.h pred deklaraci T1: class T1;.....class  v deklaraci funkce jsem nepouzival, dovolil bych si spekulovat ze se jedna o ono doprednou deklaraci v hlavicce metody, radeji na to nekam mrkni

    16.3.2009 08:42 Messa | skóre: 39 | blog: Messa
    Rozbalit Rozbalit vše Re: C++: Předávání objektu do funkce
    Problém je v tom, že se dva soubory navzájem includují. Takže v místě toho komentáře překladač o T1 vůbec nic neví. Dej mu tam někam deklaraci T1: class T1;. Nejlépe nad řádek s class T2 {.
    16.3.2009 12:45 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: C++: Předávání objektu do funkce
    Jak už bylo řečeno výše, problém ve tvém kódu je způsobený cyklem ve volání include a vyřešit se dá použitím dopředné deklarace.

    Jinak obecně v případech, kdy ve třídě A potřebuješ například jen ukazatel na objekt nějaké jiné třídy B, je docela zbytečné před samotnou deklarací A includovat celý hlavičkový soubor třídy B. Kompilátor se spokojí s tím, že ho dopřednou deklarací ujistíš o tom, že třída B bude definovaná prostě jenom někde jinde. Preprocessor tak nebude muset natahovat celý hlavičkový soubor a ušetří to docela dost práce (v opravdu velikém projektu by se spousta závislostí mezi soubory už mohla docela dost projevit na době kompilace).

    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.