Cześć,
mam problem z wypełnieniem tablicy statycznej, która przechowuje wskaźniki na obiekty abstrakcyjnej klasy Organizm, po której dziedziczą klasy: Zwierze i Roslina.
Moim zadaniem jest wstawienie do tej tablicy obiektów Zwierze i Roslina (czyli w tablica zadeklarowana jako Organizm*, ale przechowująca tak naprawdę tylko Zwierze* i Roslina*). Ma to pokazać poliformizm. Jednak próby wypełnienia tablicy kończą się błędem : "IntelliSense: a value of type "Zwierze *" cannot be assigned to an entity of type "Organizm *" ". Nie mam pojęcia jak zrobić to poprawnie. Jesli klasa Zwierze dziedziczy po klasie Organizm, to czy nie powinna "mieścić się" w tablicy(jest to dla mnie instynktowne, ale najwyraźniej mój instynkt jest upośledzony )?
Dodam, że tablice Organizmów przechowuję w klasie Swiat(jest to obowiązkowe). Poniżej mój kod:
///////////////////////////////////////zawartosc Swiat.h
class Swiat{
Swiat();
void WykonajTure();
void rysujSwiat();
~Swiat();
static int IDswiata;
Organizm* tab[20][20] = {};
friend class Roslina;
friend class Zwierze;
//////////////////////Swiat.cpp
Swiat::Swiat()
{
char znak='b';
Zwierze *a = new Zwierze(znak);
tab[0][0] = a;//w tych miejscach bład
Roslina *a = new Roslina(znak);
tab[0][1] = a;//w tych miejscach bład
};
//////////Organizm.h
#include "Swiat.h"
class Organizm{
public:
virtual void akcja()=0;
virtual void kolizja()=0;
virtual void rysowanie() = 0;
protected:
char ID;
int sila=0;
int inicjatywa=0;
int x, y;
private:
Swiat *swiat;
friend class Roslina;
friend class Zwierze;
};
/////////////////////////Zwierze.h
#include "Organizm.h"
class Zwierze : public Organizm
{public:
Zwierze(char znak);
void rysowanie() override;
void akcja();//przesuwanie sie o dana ilosc pól
void kolizja();//walka albo rozmnazanie
};
//////////Roslina.h
#include "Organizm.h"
class Roslina : public Organizm
{
public:
Roslina(char);
Roslina(Swiat s);
protected:
Roslina();
private:
void rysowanie() override;
void akcja();//nadpisz dla rozprzestrzenianai sie
void kolizja();
};