Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Dynamiczna tablica do obiektu z konstruktorem

Ostatnio zmodyfikowano 2014-05-22 01:00
Autor Wiadomość
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:
C/C++
player = new Gracz[ ilosc_graczy ];
player[ i ].Gracz( i, 2000 );

Wstawiam poniżej kod

C/C++
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 );
    }
};
P-110616
pekfos
» 2014-05-21 23:45:21
C/C++
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.
P-110618
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
P-110619
Moorfox
» 2014-05-22 00:09:29
C/C++
class Rozgrywka
{
private:
    int ilosc_rund;
    int ilosc_graczy;
    int kapital;
    Gracz * player //     <------ tutaj zamiast argumentu
protected:
   
public:
    Rozgrywka( Gracz * ); // tu usunac argument tez
    ~Rozgrywka();
   
};

Rozgrywka::Rozgrywka( Gracz * player ) // Skoro kompozycja to po co to ?? usunac argument
{
    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 );
    }
};
P-110622
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:

C/C++
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()' |

P-110623
Moorfox
» 2014-05-22 00:22:08
Konstruktor jest używany przy tworzeniu obiektu czyli
C/C++
for( int i = 0; i < ilosc_graczy; i++ )
{
    player = new Gracz[ ilosc_graczy ]; // <--- tutaj
    player[ i ].Gracz( i, 2000 );
}

poprawka:
C/C++
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
P-110624
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.

 
C/C++
for( int i = 0; i < ilosc_graczy; i++ )
{
    player = new Gracz( 5, 2000 )[ ilosc_graczy ]; //<--- tutaj chce zeby wstawic ; przed [ilosc_gracz]
}

Edit1 :

Jak posługuje się vectorem ?
P-110625
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:
C/C++
Vector < Gracz > vec; // to do pól klasy
for( int i = 0; i < ilosc_graczy; i++ )
{
    Gracz a( i, 2000 );
    vec.push_back( a );
}
vec[ 0 ]->kasa; // albo kropa zamiast ->
Jak nie dziala musisz sam pokombinowac
P-110626
« 1 » 2
  Strona 1 z 2 Następna strona