为什么我在b中得到非类类型box[5]的成员集的错误请求



为什么我在b中得到非类类型box[5]的成员集的请求?

我正在计算盒子的体积,并在对象的盒子数组中存储长度、宽度和体积

我能做什么来解决这个问题?

#include<iostream>
using namespace std;
class box
{
int length;
int breadth;
int height;
int n;
int volume;
box *b;
public:
box()
{
}
void set(int n)
{
for(int i=0;i<n;i++)
{this->b=new box[5];
int len,bre,hei,vol;
cout<<"enter length"<<endl;
cin>>len;
cout<<"enter breadth"<<endl;
cin>>bre;
cout<<"enter height"<<endl;
cin>>hei;
cout<<"enter volume"<<endl;
cin>>vol;
b[i].length=len;
b[i].breadth=bre;
b[i].height=hei;
b[i].volume=vol;
}
}
void get()
{
for(int i=0;i<n;i++)
{
cout<<"length "<<b[i].length;
cout<<"breadth "<<b[i].breadth;
cout<<"height "<<b[i].height;
cout<<"volume "<<b[i].volume;
}
}
};
int main()
{
box b[5];
b.set(5);
b.get();
}

强调文本main中声明的变量b

box b[5];

具有数组类型。数组没有成员函数。所以这个语句

b.set(5);

是不正确的。你可以写

b[0].set( 5 );

但是在成员函数集中有一个未初始化的指针b

b[i].length=len;
b[i].breadth=bre;
b[i].height=hei;
b[i].volume=vol;

调用未定义行为。

所以你的代码是没有意义的。

似乎需要一个静态成员函数,例如

static void set(box b[], int n)
{
for(int i=0;i<n;i++)
{
int len,bre,hei,vol;
cout<<"enter length"<<endl;
cin>>len;
cout<<"enter breadth"<<endl;
cin>>bre;
cout<<"enter height"<<endl;
cin>>hei;
cout<<"enter volume"<<endl;
cin>>vol;
b[i].length=len;
b[i].breadth=bre;
b[i].height=hei;
b[i].volume=vol;
}
}

并命名为

box b[5];
box::set( b, 5 );

在这种情况下,您应该删除数据成员b和n

int n;
box *b;

get函数可以如下方式声明和定义

void get() const
{
cout<<"length "<< length << 'n';
cout<<"breadth "<< breadth << 'n';
cout<<"height "<< height << 'n';
cout<<"volume "<< volume << 'n';
}

对于main中声明的数组,可以按以下方式调用

for ( const auto &item : b )
{
item.get();
cout << 'n';
}

最新更新