kamilall234 Temat założony przez niniejszego użytkownika |
Dynamiczna tablica do obiektu z konstruktorem » 2014-05-21 23:43:40 Witam. Zacząłem pisać swoją grę, pierwszą w życiu. Jest to Eurobiznes, najpierw będzie napisany konsolowo, a potem przełożenie kodu na SFML lub na QT. Mam problem odnośnie z tworzeniem w obiekcie Gra, (od klasy Rozgrywka, która jest główną klasą w naszej grze) dynamicznej tablicy do tworzenia obiektów typu gracz. Mam problem odnośnie tego: player = new Gracz[ ilosc_graczy ]; player[ i ].Gracz( i, 2000 ); Wstawiam poniżej kod class Gracz { private: int numer_gracza; int konto; string kolor; string nazwa; public: Gracz( int, int ); void ruh( Kosc * dawca ); void status() { cout << nazwa << endl; cout << konto << endl; }; ~Gracz(); };
Gracz::Gracz( int numer, int kasa ) : konto( kasa ) , numer_gracza( numer ) { cout << "Podaj nazwe gracza" << endl; cin >> nazwa; }; void Gracz::ruh( Kosc * dawca ) { dawca = new Kosc(); cout << dawca->rzut(); }
class Rozgrywka { private: int ilosc_rund; int ilosc_graczy; int kapital; protected: public: Rozgrywka( Gracz * ); ~Rozgrywka(); };
Rozgrywka::Rozgrywka( Gracz * player ) { cout << "------------------------------------" << endl; cout << " Witaj w nowej rozgrywce Eurobiznesu" << endl; cout << "------------------------------------" << endl; cout << "Podaj ilosc graczy" << endl; cin >> ilosc_graczy; for( int i = 0; i < ilosc_graczy; i++ ) { player = new Gracz[ ilosc_graczy ]; player[ i ].Gracz( i, 2000 ); } }; |
|
pekfos |
» 2014-05-21 23:45:21 for( int i = 0; i < ilosc_graczy; i++ ) { player = new Gracz[ ilosc_graczy ]; player[ i ].Gracz( i, 2000 ); }
|
W złym miejscu tworzysz wszystkie elementy. |
|
kamilall234 Temat założony przez niniejszego użytkownika |
» 2014-05-21 23:50:39 Tzn ? Robić to w głównej pętli programu ?
Edit: Chciałbym żeby clasa gracz była powiązana z clasa Rozgrywka jako kompozycja. Żeby dopiero gry jest utworzona Rozgrywka, można było tworzyć gracza |
|
Moorfox |
» 2014-05-22 00:09:29 class Rozgrywka { private: int ilosc_rund; int ilosc_graczy; int kapital; Gracz * player protected: public: Rozgrywka( Gracz * ); ~Rozgrywka(); };
Rozgrywka::Rozgrywka( Gracz * player ) { cout << "------------------------------------" << endl; cout << " Witaj w nowej rozgrywce Eurobiznesu" << endl; cout << "------------------------------------" << endl; cout << "Podaj ilosc graczy" << endl; cin >> ilosc_graczy; for( int i = 0; i < ilosc_graczy; i++ ) { player = new Gracz[ ilosc_graczy ]; player[ i ].Gracz( i, 2000 ); } };
|
|
kamilall234 Temat założony przez niniejszego użytkownika |
» 2014-05-22 00:18:39 Ok. Dzięki. Ale chodzi mi tutaj o same tworzenie graczy: for( int i = 0; i < ilosc_graczy; i++ ) { player = new Gracz[ ilosc_graczy ]; player[ i ].Gracz( i, 2000 ); }
Wyskakuje mi błąd w linijce player = new Gracz[ ilosc_graczy ] taki : | 100 | error: no matching function for call to 'Gracz::Gracz()' | |
|
Moorfox |
» 2014-05-22 00:22:08 Konstruktor jest używany przy tworzeniu obiektu czyli for( int i = 0; i < ilosc_graczy; i++ ) { player = new Gracz[ ilosc_graczy ]; player[ i ].Gracz( i, 2000 ); }
poprawka: player = new Gracz( tuwpiszjakasliczbe, 2000 )[ ilosc_graczy ];
Zastap tamten caly kod lacznie z petla tym co napisalem wyzej EDIT: Twoj blad oznacza wlasnie ze nie ma konstruktora domyslnego bo taki probujesz wywolac tym player = new Gracz[ ilosc_graczy ]; Konstruktor domyslny zostal zastapiany Gracz::Gracz(int,int); EDIT2: Zgaduje ze to tez nie bedzie ci to pasowac bo pewnie i oznacza numer gracza wiec moze warto stworzyc dynamiczna strukture danych zwana lista ktorzy przechowuje graczy ewentualnie kontenter list lub vector |
|
kamilall234 Temat założony przez niniejszego użytkownika |
» 2014-05-22 00:28:11 Rozumiem. Próbowałem też wcześniej tego co mi właśnie podałeś swojego, ale kompilator wymaga ode mnie postawienia (;) przed nawiasem [] . Dlatego czytam i szukam dalej. for( int i = 0; i < ilosc_graczy; i++ ) { player = new Gracz( 5, 2000 )[ ilosc_graczy ]; } Edit1 : Jak posługuje się vectorem ? |
|
Moorfox |
» 2014-05-22 00:32:26 Mówiłem, że bez pętli tworzysz w ten wiele dynamicznie alokowanych obiektów typu player najpierw 0??? pozniej 1 pozniej 2... pozniej ilosc_graczy-1 i przypisujesz je wskaznikowi nie zly memory leak. Ale to chyba ze srednikiem nie pomoze... Edit: Vector <Gracz> vec; Gracz a(5,2000); Gracz b(4,2000); vec.push_back(a); vec.push_back(b); cout << vec[0]->kasa; //kasa gracza a jak nie -> to kropa . XD cout << vec[1]->kasa; //kasa gracza b Edit2: Co do player najpierw 0 pozniej 1 pozniej 2 moj blad ciagle tworzysz ilosc_graczy obiektów Edit3: Vector < Gracz > vec; for( int i = 0; i < ilosc_graczy; i++ ) { Gracz a( i, 2000 ); vec.push_back( a ); } vec[ 0 ]->kasa;
Jak nie dziala musisz sam pokombinowac |
|
« 1 » 2 |