指针问题求解答
#include<iostream>
#include<string>
using namespace std;
class Animal{
protected:
string name;
int shoutNumber;
virtual string getShoutSound()const{return " ";}
public:
Animal()
{
name="No Name";shoutNumber=3;
}
Animal(string n)
{
name=n;shoutNumber=3;
}
string shout()
{
string result=" ";
for(int i=0;i<shoutNumber;i++)
{
result+=getShoutSound()+',';
}
return "my name is:"+name+" "+result;
}
};
class Cat : public Animal{
protected:
string getShoutSound()const{return "miao";}
public:
Cat() : Animal(){}
Cat(string nn) : Animal(nn){}
};
class Dog : public Animal{
protected:
string getShoutSound()const{return "wang";}
public:
Dog() : Animal(){}
Dog(string nn) : Animal(nn){}
};
class Sheep : public Animal{
protected:
string getShoutSound()const{return "mie";}
public:
Sheep() : Animal(){}
Sheep(string nn) : Animal(nn){}
};
struct Sport{
Animal* anl;
Sport* next;
};
Sport* addOne(Sport* head,Sport *p)
{
if(head==0)
{
head=p;
}
else
{
Sport* pp=head;
while(pp->next !=0)pp=pp->next;
pp->next=p;
p->next=0;
}
return head;
}
void dismiss(Sport* head)
{
for(Sport *p=head;p!=0;p=head)
{
head=head->next;
delete p->anl;
delete p;
}
}
void main()
{
Sport* head=new Sport;
head->anl=new Cat("abc");
Sport* anp=new Sport;
cout<<"ok\n";
anp->anl=new Cat("why");
cout<<"ajkidn\n";
head=addOne(head,anp);
for(Sport *qq=head;qq!=0;qq=qq->next)
cout<<qq->anl->shout()<<endl;
}
为什么在
else
{
Sport* pp=head;
while(pp->next !=0)pp=pp->next;
pp->next=p;
p->next=0;
}
系统会报错啊????
[解决办法]
head->anl=new Cat("abc");
head->next=0;//加上这句不然无法判断while(pp->next !=0)pp=pp->next;