Diskuze: dynamicke pole ukazatelu

C++ C a C++ dynamicke pole ukazatelu

Avatar
Mike057
Člen
Avatar
Mike057:

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
Mike057
Člen
Avatar
Mike057:

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):

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
:)
Avatar
Mike057
Člen
Avatar
Mike057:

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):

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
:)
Avatar
Mike057
Člen
Avatar
Mike057:

parada dekuji moc :)

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

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
 
Nahoru Odpovědět 13.2.2013 21:48
Avatar
Odpovídá na Mike057
Luboš Běhounek (Satik):
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
:)
Avatar
Mike057
Člen
Avatar
Mike057:

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:

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):

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
:)
Avatar
Mike057
Člen
Avatar
Mike057:

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):

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
:)
Avatar
Odpovídá na Mike057
Lukáš Hruda (Luckin):

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.