Wstawianie obiektów potomnych do tablicy obiektów "rodzic"

0

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();
};

0

A samo
tab[0][0] = new Zwierze(znak);
?

0

Niestety wywala ten sam błąd.

0

Cośpan kłamiesz...
http://ideone.com/ht62l0

1 użytkowników online, w tym zalogowanych: 0, gości: 1