为什么我在 b 中收到非 class 类型框 [5] 成员集的错误请求
why i am getting this error request for member set in b which is of non class type box[5]
为什么我收到 b 中非 class 类型 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;
在 class 定义中。
函数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';
}
为什么我收到 b 中非 class 类型 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;
在 class 定义中。
函数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';
}