IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: dynamicke pole ukazatelu

Aktivity
Avatar
Mike057
Člen
Avatar
Mike057:12.2.2013 18:27

ahoj lidi :) poradite mi nekdo jak udelat dynamicke pole ukazatelu?
jde mi o to ze potrebuju za behu vytvaret instance tridy a ukazatel na jejich metodu (nebo na celou tridu) ulozit do pole abych k ni pak mohl pristupovat. probelm je ze nevim kolik tech instanci bude a pride mi jako prasarna udelat staticke pole o 500ti prvcich :X

edit: jo a este potrebuju aby se dalo zjistit pocet prvku toho pole

Editováno 12.2.2013 18:29
 
Odpovědět
12.2.2013 18:27
Avatar
Nahoru Odpovědět
12.2.2013 18:36
https://www.facebook.com/peasantsandcastles/
Avatar
Mike057
Člen
Avatar
Mike057:12.2.2013 18:42

neak z toho moc nechapu jak to funguje :/

 
Nahoru Odpovědět
12.2.2013 18:42
Avatar
Odpovídá na Mike057
Luboš Běhounek Satik:12.2.2013 18:53

pogoogli po nejake ukazce, treba tady z toho by to snad mohlo byt trochu poznat:
http://www.mochima.com/…vectors.html
nebo
http://www.codeguru.com/…r-Part-1.htm

Nahoru Odpovědět
12.2.2013 18:53
https://www.facebook.com/peasantsandcastles/
Avatar
Mike057
Člen
Avatar
Mike057:12.2.2013 19:32

parada a este jeden dotaz :) da se na vector udelat ukazatel? jestli jo tak jak?

 
Nahoru Odpovědět
12.2.2013 19:32
Avatar
Odpovídá na Mike057
Luboš Běhounek Satik:12.2.2013 20:49

Samozrejme, v C++ muzes mit ukazatel na cokoliv, dela se uplne stejne, jako jakykoliv jiny ukazatel :)

Ukazatel na Vector tříd:

Vector<NejakaTrida>* mujVector;

Vector ukazatelů na třídu:

Vector<NejakaTrida*> mujVector;

Ukazatel na Vector ukazatelů na třídu:

Vector<NejakaTrida*>* mujVector;

A samozřejmě musíš ten Vector pak ještě vytvořit :)

Nahoru Odpovědět
12.2.2013 20:49
https://www.facebook.com/peasantsandcastles/
Avatar
Mike057
Člen
Avatar
Mike057:12.2.2013 20:57

parada dekuji moc :)

 
Nahoru Odpovědět
12.2.2013 20:57
Avatar
Mike057
Člen
Avatar
Mike057:13.2.2013 21:38

tak sem narazil na dalsi problem :/ jak udelam vector ukazatelu na funkce? :D
tohle nefunguje:

vector<void (*fce)();> initfce;
 
Nahoru Odpovědět
13.2.2013 21:38
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Mike057
Lukáš Hruda:13.2.2013 21:48

vector<void(*)()> initfce;

 
Nahoru Odpovědět
13.2.2013 21:48
Avatar
Odpovídá na Mike057
Luboš Běhounek Satik:13.2.2013 21:58
void fce()
{
...
}
vector<void(*)()> vect;
vect.push_back(fce);

Ale moc se mi to nezda, neslo by to resit jednoduseji? :D

Nahoru Odpovědět
13.2.2013 21:58
https://www.facebook.com/peasantsandcastles/
Avatar
Mike057
Člen
Avatar
Mike057:13.2.2013 21:59

edit:

no potrebuju nekam "registrovat" fce nove vytvorenejch trid...

kazda trida ma fci draw a step (draw je vykreslovani a step je cyklus treba pro pohyb)

no a ja je potrebuju volat. jen nevim jak jinak bych je mohl volat nez takhle... tezko se to vysvetluje :D

Editováno 13.2.2013 22:02
 
Nahoru Odpovědět
13.2.2013 21:59
Avatar
Mike057
Člen
Avatar
Mike057:13.2.2013 22:04

tak tohle nefunguje :/

initfce.push_back(live::ResetLive);
 
Nahoru Odpovědět
13.2.2013 22:04
Avatar
Odpovídá na Mike057
Luboš Běhounek Satik:13.2.2013 22:13

A sedi ti pocet a typy argumentu a typ navratove hodnoty?

Prehlednejsi a jednodussi reseni je mit ve Vectoru misto funkci primo ty vytvorene tridy.

Editováno 13.2.2013 22:13
Nahoru Odpovědět
13.2.2013 22:13
https://www.facebook.com/peasantsandcastles/
Avatar
Mike057
Člen
Avatar
Mike057:13.2.2013 22:19

no ja to pak potrebuju projet cyklem a vzdy tu fci spustit... jak rikam s timhle nemam vubec zkusenosti :/

 
Nahoru Odpovědět
13.2.2013 22:19
Avatar
Odpovídá na Mike057
Luboš Běhounek Satik:13.2.2013 22:24

Spis si tam nahazej ty tridy a pak je cyklem projed a pospoustej ty jejich fce.

Nahoru Odpovědět
13.2.2013 22:24
https://www.facebook.com/peasantsandcastles/
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Mike057
Lukáš Hruda:13.2.2013 22:38

Pointer na členskou funkci třídy musíš vždycky používat s instancí tý třídy. Stejně tak musíš dát kompilátoru vědět do který třídy funkce na kterou pointer ukazuje patří. "vector<void( * )()> initfce;" je deklarace vektoru pointerů na obecnou funkci. Pokud chceš vektor pointerů na členskou funkci třídy live, musíš to deklarovat takhle "vector<void(live:: * )()> initfce;". Když pak funkci přes pointer voláš, musíš použít konkrétní instanci třídy live "(instance.*i­nitfce[index])();". Při přiřazování adresy musíš použít adresní operátor & "initfce.push_bac­k(&live::Reset­Live);". Nejsem si jistej jestli je to všechno naprosto syntakticky správně, ale tušim že by mělo. Každopádně, pokud to nutně nepotřebuješ, tak doporučuju se tomu vyhnout.

Editováno 13.2.2013 22:38
 
Nahoru Odpovědět
13.2.2013 22:38
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 16 zpráv z 16.