三行代码  ›  专栏  ›  技术社区  ›  Priyam Karn

为什么我收到b中非类成员集的错误请求[5][closed]

  •  -3
  • Priyam Karn  · 技术社区  · 1 月前

    为什么我会得到这个 请求b中的非类别成员集[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();
    
    }
    
    1 回复  |  直到 1 月前
        1
  •  1
  •   Vlad from Moscow    1 月前

    强调文本 在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';
    }
    
    推荐文章