不知道怎么改,求指导

img

#include
#include
using namespace std;
class Animal
{
public:
virtual void Identify()
{
cout<<"I am an animal:"<
}
Animal(string a)
{
name=a;
}
protected:
string name;
};
class Cat:public Animal
{
public:
Cat(string a):Animal(a) {};
virtual void Identify()
{
cout<<"I am a cat:"<
}
};
class Dog:public Animal
{
public:
Dog(string a):Animal(a) {};
virtual void Identify()
{
cout<<"I am a dog:"<
}
};
class Tiger:public Cat
{
public:
Tiger(string a):Cat(a) {};
virtual void Identify()
{
cout<<"I am a cat:"<
}
};
class Zoo
{
public:
Zoo(int max); //max为动物园最多能圈养动物数
~Zoo(){ delete residents; }
void Accept(Animal *d); //接受动物
void ListAnimal(); //显示动物园所有的动物
private:
int max_animals; //动物园能圈养的动物数
int num_animals; //动物园动物园当前圈养的动物数
Animal **residents; //指向动物园圈养的动物对象的指针数组
};
Zoo::Zoo(int max)
{
max_animals=max;
num_animals=0;
}
void Zoo::Accept(Animal *d)
{
if(num_animals
{
*residents[num_animals]=*d;
num_animals++;
}
else
{
cout<<"该动物园已满员。"<
}
}
void Zoo::ListAnimal()
{
if(num_animals==0)
{
cout<<"该动物园里没有动物。"<
}
cout<<"该动物园里有动物:"<
for(int i=0;i
{
*residents[i]->Identify();
cout<
}
}
int main()
{
Zoo shanghai(3);
Animal *p;
Cat c("汤姆猫");
p=&c;
p->Identify();
shanghai.Accept(p);
shanghai.ListAnimal();
Dog d("汪汪狗");
p=&d;
p->Identify();
shanghai.Accept(p);
shanghai.ListAnimal();
Tiger t("贝乐虎");
p=&t;
p->Identify();
shanghai.Accept(p);
shanghai.ListAnimal();
return 0;

}

问题在这里:

img

你使用的时二维指针,但是没有给指针做初始化啊,二维指针要先给内部指针做初始化,再给外部指针做初始化,
你想你定义一个指针类型,不malloc申请内存就去用一样的逻辑,或者你这里先换成二维数组用,再试这个
可以思考一下,有问题再问,