注册 登录
编程论坛 C++教室

我不过是声名一个数组,有什么错

honestgrubby 发布于 2007-08-29 21:50, 708 次点击

#include<iostream>
class mammal
{public:
mammal():itsage(1){cout<<"mammal constructor....."<<endl;}
virtual ~mammal(){cout<<"mammal destructor...."<<endl;}
mammal(const mammal & rhs);
virtual void speak()const{cout<<"mammal speak!";}
virtual mammal * clone(){return new mammal(*this);}
int getage()const{return itsage;}
protected:
int itsage;
};
mammal::mammal(const mammal & rhs):itsage(rhs.getage()){cout<<"mammal copy constructor..."<<endl;}

int main()
{mammal * thearray[numanimaltype];//这一行老是报错,,我实在不知为何.

return 0;
}
在线等,谢谢!!!

9 回复
#2
mp3aaa2007-08-29 22:03
以下是引用honestgrubby在2007-8-29 21:50:49的发言:

#include<iostream>
class mammal
{public:
mammal():itsage(1){cout<<"mammal constructor....."<<endl;}
virtual ~mammal(){cout<<"mammal destructor...."<<endl;}
mammal(const mammal & rhs);
virtual void speak()const{cout<<"mammal speak!";}
virtual mammal * clone(){return new mammal(*this);}
int getage()const{return itsage;}
protected:
int itsage;
};
mammal::mammal(const mammal & rhs):itsage(rhs.getage()){cout<<"mammal copy constructor..."<<endl;}

int main()
{mammal * thearray[numanimaltype];//这一行老是报错,,我实在不知为何.

return 0;
}
在线等,谢谢!!!

#3
valentineyzq2007-08-29 22:04
numanimaltype是什么?好像你没声明过。就算声明过了也不能这么用,应该动态分配。
#4
honestgrubby2007-08-29 22:06
#include<iostream>
class mammal
{public:
mammal():itsage(1){cout<<"mammal constructor....."<<endl;}
virtual ~mammal(){cout<<"mammal destructor...."<<endl;}
mammal(const mammal & rhs);
virtual void speak()const{cout<<"mammal speak!";}
virtual mammal * clone(){return new mammal(*this);}
int getage()const{return itsage;}
protected:
int itsage;
};
mammal::mammal(const mammal & rhs):itsage(rhs.getage()){cout<<"mammal copy constructor..."<<endl;}
const int numanimaltype=3;
int main()
{mammal * thearray[numanimaltype];
return 0;
}
我声名了,忘粘上去了,这样也不行?
#5
aipb20072007-08-29 22:08

可以了

#6
honestgrubby2007-08-29 22:09
我就是把const int numanimaltype=3;这行去掉,真接声名 mammal * thearray[3];也不行,说是[Error] C:\PROGRA~1\C-FREE~1\temp\Untitled1.cpp:36: `thearray' undeclared (first use this function)
#7
honestgrubby2007-08-29 22:32

完整的程序是这样的:
#include<iostream>
class mammal
{public:
mammal():itsage(1){cout<<"mammal constructor....."<<endl;}
virtual ~mammal(){cout<<"mammal destructor...."<<endl;}
mammal(const mammal & rhs);
virtual void speak()const{cout<<"mammal speak!";}
virtual mammal * clone(){return new mammal(*this);}
int getage()const{return itsage;}
protected:
int itsage;
};
mammal::mammal(const mammal & rhs):itsage(rhs.getage()){cout<<"mammal copy constructor..."<<endl;}
class dog:public mammal
{public:
dog(){cout<<"dog constructor.....";}
virtual ~dog(){cout<<"dog destructor...";}
dog (const dog & rhs);
void speak()const{cout<<"woof!";}
virtual mammal * clone(){return new dog(*this);}
};
dog::dog(const dog & rhs):mammal(rhs){cout<<"dog copy constructor....";}
class cat:public mammal
{public:
cat(){cout<<"cat constructor....";}
~cat(){cout<<"cat destructor....";}
cat(const cat &);
void speak()const{cout<<"meow!";}
virtual mammal * clone(){return new cat(*this);}

};
cat::cat(const cat & rhs):mammal(rhs){cout<<"cat copy constructor....";}
enum ANIMALS{mammal,dog,cat};
const int numanimaltype=3;
int main()
{mammal * thearray[numanimaltype];
mammal * ptr;
int choice,i;
for(i=0;i<numanimaltype;i++)
{cout<<"(1)dog (2)cat (3)mammal :";
cin>>choice;
switch(choice)
{case dog: ptr = new dog;
break;
case cat: ptr = new cat;
break;
default: ptr=new mammal;
break;
}
thearray[i]=ptr;}
mammal * otherarray[numanimaltype];
for(i=0;i<numanimaltype;i++)
{thearray[i]->speak();
otherarray[i]=thearray[i]->clone();}
for(i=0;i<numanimaltype;i++)
otherarray[i]->speak();
return 0;
}
有不少错误.

#8
aipb20072007-08-29 23:43
我很奇怪你用了cout,endl,确不加std声明,你的编译器不报错?

你4楼的程序除了上面这个没什么错误。
声请数组那里因为你什么都没做就结束了,所以应该会有警告,不会报错。

后面的太乱,就不看了!
#9
冰的热度2007-08-30 12:08
奇怪,你四楼那个代码,我粘贴下来到C-Free3.5编译,并没有报错呀!!!

到VC++6.0中编译,就不只那一个错了,你得把using namespace std;加上.

还有一个警告错,就是那个数组在下面没有用到


#10
honestgrubby2007-09-01 09:09

楼主,我用的是C-FREE编译器,不用std声名也没问题,到现在也没找出程序哪里错.
顺便问大哥一句,你有严蔚敏数据结构C语言版的书吗?

1