C++ pole
Re: C++ pole
Preco potom vyskakuje na riadku obj[0]=new Objekt(); chyba syntax error : '['?
Re: C++ pole
No to ja neviem, ale keď sem pošleš nejaký väčší kus kódu, tak ti to poviem. A ideálne aj prostredie/kompiler, ktorý používaš.
Re: C++ pole
Tym objektom je Lopta a vyuzivam VS
Kód: Vybrať všetko
Lopty::Lopty(IPlocha *hraciaplocha)
: PohyblivyObjekt(hraciaplocha ? hraciaplocha->sirka() : 0, hraciaplocha ? hraciaplocha->vyska() : 0, 0, 0),
lop[0] = new Lopta(),
aHraciaPlocha(hraciaplocha),
aLopta(NULL)
{
if (aHraciaPlocha)
aLopta = aHraciaPlocha->citajBMP("ball.bmp");
if (aLopta)
{
aSirka = aLopta->sirka();
aVyska = aLopta->vyska();
}
}Re: C++ pole
Sranda musí byť. Vieš na čo slúži inicializujúci zoznam?
Re: C++ pole
Problém je to, že to používaš ako výraz v konštruktore za dvojbodkou (initialization list, neviem ako sa to zvykne prekladať)
Ukážka:
Členské premenné triedy sa tu inicializujú výhradne cez zátvorku, ktorá upravuje volanie konštruktora danej premennej.
Toto je nesprávne, pretože a = 10 je už výraz a ten sa volá až po skonštruovaní premennej. To je zle, pretože init. list slúži pre úpravu volania konštruktora.
No a ty robíš toto
čo je očividne tiež výraz.
Možno by si si povedal, že môžeš urobiť toto
ale sklamem ťa, p[0] sa tiež volá až po skonštruovaní p (a síce výraz *(p+0) pri poli, alebo volanie p.operator[](0) pri objektoch).
Ukážka:
Kód: Vybrať všetko
class Objekt
{
public:
int a;
Objekt() : a(10) //toto je správne
{
printf( "vytvoril si objekt, a = %d\n", this->a );
}
};Kód: Vybrať všetko
class Objekt
{
public:
int a;
Objekt() : a = 10 //toto je nesprávne
{
printf( "vytvoril si objekt, a = %d\n", this->a );
}
};No a ty robíš toto
Kód: Vybrať všetko
: p[0] = 10Možno by si si povedal, že môžeš urobiť toto
Kód: Vybrať všetko
: p[0](10)Re: C++ pole
Ak si pochopil môj post, tak by si mal vedieť ako.
Re: C++ pole
Neviem to stale vyskakuju nejake chyby
Re: C++ pole
Ak napíšeš "nejde to, vyskakujú nejaké chyby", tak ti tu nikto nepomôže, nie sme veštci.
Re: C++ pole
Nech to skusam ako chcem stale ina chyba
Re: C++ pole
Pisem za : toto *(lop + 0)(new Lopta()) a syntax error : '*'
Re: C++ pole
Takže si moje vysvetlenie nepochopil a prečítaj si ho znovu. A potom ešte zo tri krát.
Alebo ak som to napísal zle, otvor Google a prečítaj si ako sa používa initialization list.
Ale rád by som vedel, prečo to chceš silou mocou napchať to init listu?
Alebo ak som to napísal zle, otvor Google a prečítaj si ako sa používa initialization list.
Ale rád by som vedel, prečo to chceš silou mocou napchať to init listu?
Re: C++ pole
Hladal som a nenasiel som nic a kde to mam inde vlozit?
Co znamena toto
Co znamena toto
?BX napísal: (a síce výraz *(p+0) pri poli, alebo volanie p.operator[](0) pri objektoch).
Re: C++ pole
To by si mal vedieť, ak vieš, čo je to pole a máš nejaké poňatie o pointeroch. To ale teraz nie je dôležité.
Dôležité je teraz to, že init. list upravuje chovanie konštruktora členských premenných v triede. Čiže za dvojbodku musíš dať volanie konštruktora. To ty nerobíš a pre prvok pola sa to ani nedá. Ak napíšeš int p[10];, tak p je členská premenná triedy. Na ňu sa zavolá konštruktor. Keď chceš pristupovať k prvkom takéhoto pola, tak to pole už musí byť vytvorené (teda skonštruované). Preto v init. liste nemôžeš volať konštruktor na konkrétny prvok pola. Proste sa to nedá.
Z toho vyplýva to, na čo si mal prísť sám => inicializáciu prvkov pola rob v tele konštruktora a nesnaž sa to napchať do init. listu, pretože na to init. list nie je stavaný a nedá sa to.
Dôležité je teraz to, že init. list upravuje chovanie konštruktora členských premenných v triede. Čiže za dvojbodku musíš dať volanie konštruktora. To ty nerobíš a pre prvok pola sa to ani nedá. Ak napíšeš int p[10];, tak p je členská premenná triedy. Na ňu sa zavolá konštruktor. Keď chceš pristupovať k prvkom takéhoto pola, tak to pole už musí byť vytvorené (teda skonštruované). Preto v init. liste nemôžeš volať konštruktor na konkrétny prvok pola. Proste sa to nedá.
Z toho vyplýva to, na čo si mal prísť sám => inicializáciu prvkov pola rob v tele konštruktora a nesnaž sa to napchať do init. listu, pretože na to init. list nie je stavaný a nedá sa to.
Re: C++ pole
Ja som bol v tom ze to davam do konstruktora a kde zacina potom konstruktor tymi zlozenymi zatvorkami? Tam mi tiez vypisuje chybu ze nemam vhodny konstruktor
Re: C++ pole
Pána a ja som si myslel, že aspoň základy C++ máš 
Vlož to pekne to tela konštruktora (medzi zložené zátvorky) a pošli sem kód a prípadné chyby.
Vlož to pekne to tela konštruktora (medzi zložené zátvorky) a pošli sem kód a prípadné chyby.
Re: C++ pole
Mylit sa je ludske.
Dobre uz to ide nemohol som pouzit bezparametricky konstruktor.
Dobre uz to ide nemohol som pouzit bezparametricky konstruktor.