Tak, chciałem skorzystać z polimorfizmu. Do czasu przeczytania Twojej odpowiedzi zrobiłem tak jak myślałem wcześniej czyli dodałem do klasy bazowej wszystkie metody. Czytałem też o dynamic_cast, ale jakoś nie pasowało mi jego użycie. Oczywiście, że pewnie całość klas jest źle zaprojektowana, bo robię to pierwszy raz i nie wiem jak powinno wyglądać i "jak to się ogólnie robi" :P Wszystko wygląda tak:
class Pionek
{
protected:
int pozycja; // pozycja na planszy
string nazwa;
public:
Pionek();
void set_pozycja(int n);
int get_pozycja();
virtual void set_start() = 0;
void przesun(int ile);
virtual void set_nazwa();
string get_nazwa();
void set_zdrowie(int);
int get_zdrowie();
int get_sila();
int get_zasieg();
};
class Pionek_gracza : public Pionek
{
private:
int zdrowie;
public:
Pionek_gracza(int nrp);
int get_zdrowie();
void set_zdrowie(int n);
void set_start();
};
class Pionek_potwora : public Pionek
{
private:
int sila;
int zasieg;
public:
Pionek_potwora(int nsila, int nzasieg, int i);
int get_sila();
int get_zasieg();
void set_start();
};
Posiadam listę pionków, czy raczej wskaźników na pionki stworzoną tak:
void Plansza::tworz_pionki() // tworzy wszystkie pionki i nadaje im nazwy
{
for(int i=0; i<3; i++)
{
dodaj_na_liste(new Pionek_gracza(i+1));
lista_Pionkow[i]->set_nazwa();
}
for(int i=0;i<4;i++)
{
dodaj_na_liste(new Pionek_potwora(10,10,i));
lista_Pionkow[i]->set_nazwa();
}
}
Co chcę osiągnąć:
wywołując takie coś
lista_Pionkow[j]->set_zdrowie(....);
chcę żeby przestawiło mi zdrowie pionka_gracza na podaną wartość. Metoda set_zdrowie w klasie Pionek jest pusta, w klasie Pionek_potwora nie ma jej wcale (potwory nie mają zdrowia), jest tylko w klasie Pionek_gracza.
Wyrzuca błędy takie:
błąd:undefined reference to
Pionek::get_zdrowie()'- i jeszcze podobnych 4, wszystkie mają ten sam problem, najwyżej z inną metodą.
:-1: błąd ld returned 1 exit status `
Wszystko to działało, dopóki miałem 2 tablice osobne dla potworów i graczy. Problemem jest tylko to, że teraz mam jedną listę ze wskaźnikami na Pionek (klasę bazową)