成员引用基类型'double'不是结构或联合

Ste*_*eee 5 c++

我是C++的新手,无法弄清楚如何修复错误,非常感谢您的帮助发生错误的部分我正在尝试将半径输入到cirArea[]数组中,但它似乎不起作用.

这是我的代码的一部分:

int main(){
    Circle *area;
    double cirRadius;
    int numCircle;

    cout << "How many circles?" << endl;
    cin >> numCircle;
    double cirArea[numCircle];

    for (int i = 0; i < numCircle; i++){
        cout << "Enter the radius: ";
        cin >> cirRadius;
        cirArea[i].setRadius(cirRadius);
    }
}
Run Code Online (Sandbox Code Playgroud)

对于setRadius():

void Circle::setRadius(double r){
    if (r >= 0)
        radius = r;
    else {
        cout << "Invalid radius\n";
        exit(EXIT_FAILURE);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以这是错误:

member reference base type 'double' is not a structure or union
            cirArea[i].setRadius(cirRadius);
            ~~~~~~~~~~^~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

Pat*_*ryk 2

您无法创建“大小不恒定”的静态分配数组。第二个问题是cirArea不是Circletype 而是double.

您必须动态分配它(然后删除它)并使其Circle键入:

int main(){
    double cirRadius;
    int numCircle;

    cout << "How many circles?" << endl;
    cin >> numCircle;
    Circle *area = new Circle[numCircle];

    for (int i = 0; i < numCircle; i++){
        cout << "Enter the radius: ";
        cin >> cirRadius;
        cirArea[i].setRadius(cirRadius);
    }

    delete[] area;
}
Run Code Online (Sandbox Code Playgroud)

但更好的方法是使用std::vector

#include <iostream>
#include <cstdlib>
#include <vector>

struct Circle
{
    double radius;

    void setRadius(double r){
        if (r >= 0)
            radius = r;
        else {
            std::cout << "Invalid radius\n";
            exit(EXIT_FAILURE);
        }
    }    
}   ; 

int main(){
    double cirRadius;
    int numCircle;

    std::cout << "How many circles?\n";
    std::cin >> numCircle;
    std::vector<Circle> area;
    area.reserve(numCircle);

    for (int i = 0; i < numCircle; ++i){
        std::cout << "Enter the radius: ";
        std::cin >> cirRadius;
        area.emplace_back();
        area.back().setRadius(cirRadius);
    }

    for( Circle& i : area )
    {
      std::cout << i.radius << '\n';
    }
}
Run Code Online (Sandbox Code Playgroud)

http://cpp.sh/3l7ti