C++ pole

Programovacie jazyky, rady, poradňa...
F1L1P
Expert
Expert
Príspevky: 174
Registrovaný: 15 máj 2009, 20:45

C++ pole

Príspevok od používateľa F1L1P »

Vytvorim v hlavickovom subore Objekt *obj[5]; a ako to pole v zdrojovom subore inicializujem lebo cez obj[0]=new Objekt();... to nejde?
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: C++ pole

Príspevok od používateľa BX »

Ale ide.
F1L1P
Expert
Expert
Príspevky: 174
Registrovaný: 15 máj 2009, 20:45

Re: C++ pole

Príspevok od používateľa F1L1P »

Preco potom vyskakuje na riadku obj[0]=new Objekt(); chyba syntax error : '['?
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: C++ pole

Príspevok od používateľa BX »

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š.
F1L1P
Expert
Expert
Príspevky: 174
Registrovaný: 15 máj 2009, 20:45

Re: C++ pole

Príspevok od používateľa F1L1P »

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();
	}
}
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: C++ pole

Príspevok od používateľa pcsiete »

Sranda musí byť. Vieš na čo slúži inicializujúci zoznam?
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: C++ pole

Príspevok od používateľa BX »

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:

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 );
        }
};
Členské premenné triedy sa tu inicializujú výhradne cez zátvorku, ktorá upravuje volanie konštruktora danej premennej.

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 );
        }
};
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

Kód: Vybrať všetko

: p[0] = 10
čo je očividne tiež výraz.
Možno by si si povedal, že môžeš urobiť toto

Kód: Vybrať všetko

: p[0](10)
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).
F1L1P
Expert
Expert
Príspevky: 174
Registrovaný: 15 máj 2009, 20:45

Re: C++ pole

Príspevok od používateľa F1L1P »

Ako to opravim?
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: C++ pole

Príspevok od používateľa BX »

Ak si pochopil môj post, tak by si mal vedieť ako.
F1L1P
Expert
Expert
Príspevky: 174
Registrovaný: 15 máj 2009, 20:45

Re: C++ pole

Príspevok od používateľa F1L1P »

Neviem to stale vyskakuju nejake chyby
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: C++ pole

Príspevok od používateľa BX »

Ak napíšeš "nejde to, vyskakujú nejaké chyby", tak ti tu nikto nepomôže, nie sme veštci.
F1L1P
Expert
Expert
Príspevky: 174
Registrovaný: 15 máj 2009, 20:45

Re: C++ pole

Príspevok od používateľa F1L1P »

Nech to skusam ako chcem stale ina chyba
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: C++ pole

Príspevok od používateľa BX »

Tak skúšaj ďalej...
F1L1P
Expert
Expert
Príspevky: 174
Registrovaný: 15 máj 2009, 20:45

Re: C++ pole

Príspevok od používateľa F1L1P »

Pisem za : toto *(lop + 0)(new Lopta()) a syntax error : '*'
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: C++ pole

Príspevok od používateľa BX »

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?
F1L1P
Expert
Expert
Príspevky: 174
Registrovaný: 15 máj 2009, 20:45

Re: C++ pole

Príspevok od používateľa F1L1P »

Hladal som a nenasiel som nic a kde to mam inde vlozit?
Co znamena toto
BX napísal: (a síce výraz *(p+0) pri poli, alebo volanie p.operator[](0) pri objektoch).
?
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: C++ pole

Príspevok od používateľa BX »

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.
F1L1P
Expert
Expert
Príspevky: 174
Registrovaný: 15 máj 2009, 20:45

Re: C++ pole

Príspevok od používateľa F1L1P »

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
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: C++ pole

Príspevok od používateľa BX »

Pána a ja som si myslel, že aspoň základy C++ máš :D
Vlož to pekne to tela konštruktora (medzi zložené zátvorky) a pošli sem kód a prípadné chyby.
F1L1P
Expert
Expert
Príspevky: 174
Registrovaný: 15 máj 2009, 20:45

Re: C++ pole

Príspevok od používateľa F1L1P »

Mylit sa je ludske.
Dobre uz to ide nemohol som pouzit bezparametricky konstruktor.
Napísať odpoveď