C++,为何出现illegal indirection?

#include <iostream>
using namespace std;
const double PI=3.141593;
class Container
{
public:
Container();
Container(double r,double h)
{
radius=r;
high=h;
}
virtual double volume()=0;
private:
double radius;
double high;
};
class Sphere:public Container
{
public:
Sphere(double r){ radius=r; }
double volume()
{
return PI*radius*radius*radius*4/3;
}
private:
double radius;
};
class Cone:public Container
{
public:
Cone(double r,double h){ radius=r;
high=h; }
double volume()
{
return PI*radius*radius*high/3;
}
private:
double radius;
double high;
};
class Cylider:public Container
{
public:
Cylider(double r,double h){ radius=r;
high=h;}
double volume()
{
return PI*radius*radius*high;
}
private:
double radius;
double high;
};
int main()
{
float volumesum(Container *Ct[],int n);
Cylider c1(1.0,2.0);
Cone co(1.0,2.0);
Sphere sh(1.0);
Container *Ct[3];
Ct[0]=&c1;
Ct[1]=&co;
Ct[2]=&sh;
cout<<"体积总和:"<<volumesum(Ct,3)<<endl;
return 1;
}
float volumesum(Container *Ct[],int n)
{
double z=0.0;
for(n=0;n<3;n++)
z+=*Ct[n]->volume();
return z;
}

汗... 楼上错误.. 别听他的..

楼主你的语法错误就是一点:
volumesum函数中的*Ct[n]->volume() 改成 Ct[n]->volume()
因为Ct是 Container *[]类型, Ct[n]就是Container *类型, 已经是指针了, 使用了->就不需要*

此外虽然语法上没有错了, 但是还有1个结构上的问题(..也不算错误).
那3个类型继承自Container的同时, 也把 Container的数据成员继承过来了, 所以派生类型不需要
再去定义radius和high, 你使得派生类都有2个radius和high, 虽然没有问题..但是浪费了内存......追问

您说得对 可修改过后还是有错误

追答

啥错?

追问

那个运行结果出不来

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-29
问题解答:
1、 Container(); 你只给出了声明,没有初始化,尽管它啥也没干。改成:Container(){};
2、z+=*Ct[n]->volume(); 改成 z+=Ct[n]->volume();