C++ problem s polom objektou

Programovacie jazyky, rady, poradňa...
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

C++ problem s polom objektou

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

Mam triedu cPlayer a v nej mam pole objektov triedy cBullet avsak konstruktor cBullet prijma jeden parameter, stale mi to hadze errory prosim ak niekto vie ako to spravit, poradte :roll:
cPlayer definicia triedy:

Kód: Vybrať všetko

enum { PLAYER_BULLETS = 100};
cBullet Bullets[PLAYER_BULLETS];
...
cPlayer konstruktor:

Kód: Vybrať všetko

cPlayer::cPlayer(float mx, float my)
{
    x = mx;
    y = my;
    angle = 0;
    health = 100;
    bulletType = 1;
    _frequency = 0;
    Bullets[] = cBullet('p');
    sizeX = imgPlayer.GetWidth();
    sizeY = imgPlayer.GetHeight();
}
cBullet konstruktor:

Kód: Vybrať všetko

cBullet::cBullet(char _type)
{
    x = 0;
    y = 0;
    active = false;
    type = _type;
}
Prílohy
Untitled.png
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: C++ problem s polom objektou

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

Nechápem. Veď Bullets je pole objektov(OBJEKTOV!) cBullet. Konštruktor cBullet vráti práve jeden objekt typu cBullet, ale ty by si chcel, aby sa ti naplnilo celé pole. wtf?
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Re: C++ problem s polom objektou

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

j rozumiem taka blba chyba, predtym som mal to pole mimo triedy a vyzeralo to takto, nwm ci to priradilo vsetkym lebo som to neskusal ale nehadzalo to errory

Kód: Vybrať všetko

cBullet Bullets[PLAYER_BULLETS] = cBullet('p');
co robilo hento? :roll:
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: C++ problem s polom objektou

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

Kód: Vybrať všetko

cBullet Bullets[100] = cBullet('p');
Je to isté ako keď napíšem

Kód: Vybrať všetko

int pole[100] = 10;
A to je hovadina.
I keď možno nechápem, na čo sa teraz pýtaš.
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Re: C++ problem s polom objektou

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

no hej ja viem ze je to blbost ale co to spravi chchem vediet :) lebo hentak co si ty dal priklad 100 a 10 tak to mi vyhodi chybu ked som skusal ale to moje nie takze to cosi musi urobit ale nwm co :)
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: C++ problem s polom objektou

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

Aha, mňa zmiatli tie parametre :oops:
Ten riadok ti naozaj naplní celé pole objektami cBullet s parametrom 'p'. Malo by to byť ekvivalentné k zápisu:

Kód: Vybrať všetko

cBullet Bullets[100] = 'p';
, čiže tak je to dobre.

// riadne motám dnes
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Re: C++ problem s polom objektou

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

ale akosi to nefuguje, mam toto v konstruktore a naplni mi to pole nezmyselnymi hodnotami

Kód: Vybrať všetko

Bullets[PLAYER_BULLETS] = cBullet('p');
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: C++ problem s polom objektou

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

Ako vieš? Akými?
c-ice
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 04 mar 2008, 15:18
Kontaktovať používateľa:

Re: C++ problem s polom objektou

Príspevok od používateľa c-ice »

Kód: Vybrať všetko

cBullet *Bullets[100];
Bullets[0] = new cBullet("p");
Bullets[1] = new cBullet("WhatEver");
...
myslim si ze nie BX
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: C++ problem s polom objektou

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

Ahá, jasné. Ja som si to skúšal, ale pole som vytvoril aj vypísal v main(), tak mi to šlo :oops:
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Re: C++ problem s polom objektou

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

//autoeditácia príspevku (08 Máj 2011, 15:40)
c-ice napísal:

Kód: Vybrať všetko

cBullet *Bullets[100];
Bullets[0] = new cBullet("p");
Bullets[1] = new cBullet("WhatEver");
...
myslim si ze nie BX
ja som to urobil aj cez cyklus ako aj ty ale chcel som vediet preco hento nejde ked BX si myslel ze to ide :)
mohli by ste mi vysvetlit co to urobilo to priradenie do toho pola pls?
johny3212
Star
Star
Používateľov profilový obrázok
Príspevky: 532
Registrovaný: 17 feb 2008, 19:56
Bydlisko: Terchova
Kontaktovať používateľa:

Re: C++ problem s polom objektou

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

reDo napísal://autoeditácia príspevku (08 Máj 2011, 15:40)

Kód: Vybrať všetko

cBullet *Bullets[100];
Bullets[0] = new cBullet("p");
Bullets[1] = new cBullet("WhatEver");
...
myslim si ze nie BX
Redo ja by som to spravil takto

Kód: Vybrať všetko

cBullet *_bullets = new cBullet[20]; //tym ti alokuje pamat pre vsetky 20 prvkov, cize sa 20x zavola konstruktor, v ktorom sa data //naplnia na nejaku def. hodnotu
//potom das cyklus v ktorom cez nejaku metodu tej triedy naplnis data.
for(int i = 0; i<20; i++)
{
_bullets[i].SetData(''kravina');
}
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Re: C++ problem s polom objektou

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

dynamicka alokacia neni nutna pretoze to pole je v sukromnej casti triedy cPlayer, mne nejde o to ako to spravit lebo to viem ale preco nefunguje to priradenie konstruktora a co to potom robi vlastne
johny3212
Star
Star
Používateľov profilový obrázok
Príspevky: 532
Registrovaný: 17 feb 2008, 19:56
Bydlisko: Terchova
Kontaktovať používateľa:

Re: C++ problem s polom objektou

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

Tam ten konstruktor volat nemusis.

Kód: Vybrať všetko

cBullet Bullets[PLAYER_BULLETS]; //ti zavola PLAYER_BULLETS krat konstruktor, aj ked nepouzijes new.
cBullet Bullets[PLAYER_BULLETS] = cBullet('p'); //toto je blbost.
Si daj data vypisovat do konzoli a uvidis ako to funguje. A urcite tam pouzi new a delet, prave preto, ze je deklarovana ako sukromna premenna triedy :).

A na PLAYER_BULLETS nepouzivaj enum, ale skor #define, ale v podstate ti to je fuk zatial :).
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Re: C++ problem s polom objektou

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

vsak som aj vypisoval :), nechapem preco by som mal mat tie naboje ako dynamicke no potom mi napises co ako opravit ked to bude dorobene cele ;)
Napísať odpoveď