Anonymní profil pretis – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil pretis – Programujte.comAnonymní profil pretis – Programujte.com

 

Příspěvky odeslané z IP adresy 78.80.61.–

pretis
C / C++ › Volání funkce z jiné třídy u…
12. 12. 2012   #168714

#13 vitamin
Díky moc, tohle si myslím že už bych mohl použít:)

pretis
C / C++ › Volání funkce z jiné třídy u…
12. 12. 2012   #168707

#10 ingiraxo
protože jakmile není nějaký atribut statický, nemůžu k němu přistoupit

error: invalid use of non-static data member 'B::cislo'
pretis
C / C++ › Volání funkce z jiné třídy u…
12. 12. 2012   #168701

#8 ingiraxo
Ja to chápu jak to má fungovat, ale nevím proč mě to píše tu chybu, kód je přímo zkopírovaný. Navíc ztratím možnost pracovat s atributy tridy B nebo ne?

pretis
C / C++ › Volání funkce z jiné třídy u…
12. 12. 2012   #168694

Už tomu rozumím, předám tam funkci která tam bude mít this a ukazatel na tu eventu, a dispatcher potom zavolá tu konkrétní funkci pomocí toho co je v this(čili ta třída, která vlastní onu funkci) je to tak? Jak má potom ale vypadat definice toho EventHandler? Jinak s tím kamarádem se mi to líbí ale kompilátor mě vyhodí 

error: 'catchEvent' is not a member of 'B'

když oddělám friend ta to jde ale zase to hlásí stejnou chybu že nejsou stejné ty typy funkcí. S friend jsem ještě nedělal jak tu chybu opravit?

pretis
C / C++ › Volání funkce z jiné třídy u…
12. 12. 2012   #168678

#2 ingiraxo
Ahoj, díky za odpověď, to se v podstatě se to podobá řešení na kterém teď dělám, ale pořád to neřeší můj problém. Jde mi o to abych v jedné třídě odeslal eventu a ve druhé ji odchytil a tím zavolal funkci která je na to navázaná(nadeklarovaná a naimplementovaná je ve třídě která eventu odchytila), to vše pomocí EventDispatcheru (který je singleton). Problém je ovšem v tom, že ty funkce volá EventDispatcher po odeslání eventy a ten už zase nezná jinej typ než 

typedef void(*EventHandler)(Event*);

kdeždo když si tam nějaká třída nabinduje svoje funkce tak to už je rozdílný typ, o to mě jde, nějak to sjednotit aby EventDiaspatcheru nezáleželo na tom z jaké třídy je ta funkce kterou volá.

pretis
C / C++ › Volání funkce z jiné třídy u…
12. 12. 2012   #168667

Ahoj, píšu si EventDispatcher takový jaký má ActionScript3 a narazil jsem na problém. Náznak funkčnosti: dispatcher funguje tak, že třídy které ho využívají do něj přidají Listener, ten obsahuje stringrovou proměnnou názvu eventy a odkaz("handler") na svoji funkci u nich ve třídě. Dispatcher potom při přijetí eventy odjinud projde všechny listenery a podle názvu eventy volá handlery v listenerech. Všechno funguje v mainu, ale problém je, že když jsou handlery ve třídách, EventDispatcher při vytvoření listeneru nerozezná jednotlivé typy funkcí protože chodí každá od jiné třídy. Dá se nějak udělat aby měl dispatcher typdef handleru nějakou obecnou hodnotu?

takhle to vypadá:

typedef void(*EventHandler)(Event*);

při kompilaci vyhodí chybu 

no matching function for call to 'Scene::addEventListener(const string&, void (Game::*)(GameEvents::Event*))'

protože typ handleru je jen *EventHandler ne Game::*EventHandler ale když mám x tříd tak to potřebuji obecně.

Dá se to tedy nějak rozumně udělat? Mám už sice vymyšlenou jednu metodu jak to udělat ale přidává další třídu a je tam potřeba vyšší režie ze strany tříd které využívají dispatcher takže bych se bez této metody rád obešel.

díky moc za odpovědi, zdraví pretis.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý