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

时间:2016-03-22 08:25:44

标签: 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);
    }
}

对于setRadius():

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

所以这是错误:

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

5 个答案:

答案 0 :(得分:2)

您不能使用'not a constant size'创建静态分配的数组。 第二个问题是{"CourseValue":"{\"color\": \"green\",\"value\": \"#f00\"}","courseId":"C5"} 不是cirArea类型,而是Circle

您必须动态分配(然后将其删除)并将其设为double类型:

Circle

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

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;
}

http://cpp.sh/3l7ti

答案 1 :(得分:1)

您的cirArea类型为double,而不是Circle,因此您无法使用Circle方法。 将cirArea的类型从double更改为Circule以修正错误。

答案 2 :(得分:1)

基本上这句话是错误的:

double cirArea[numCircle];

C ++不支持可变长度数组,我认为您的意思是使用Circle对象作为元素而不是double

使用std::vector<Circle>来建模Circle个对象的矢量。

答案 3 :(得分:1)

问题是cirArea是一个double而不是Circle的数组。 double类型当然没有Circle成员函数(或任何成员函数)。

由于你的编译器似乎支持variable-lenght arrays,我想你真的想要

Circle cirArea[numCircle];

可变长度数组不是标准的C ++特性,如果你想让程序可移植,你应该使用std::vector之类的

std::vector<Circle> cirArea(numCircle);

答案 4 :(得分:0)

double cirArea[numCircle];array double。它应该是array的{​​{1}}。但是,Circle是一个非const,所以你不能这样做(即使编译器允许它。它不是标准的)。您应该使用numCircle或更好的dynamically allocated array

完整的C ++解决方案将是:

std::vector

如果int main(){ Circle *area; double cirRadius; int numCircle; cout << "How many circles?" << endl; cin >> numCircle; std::vector<Circle> cirArea; cirArea.reserve(numCircle); for (int i = 0; i < numCircle; i++){ cout << "Enter the radius: "; cin >> cirRadius; cirArea.emplace_back(); cirArea.back().setRadius(cirRadius); } } 接受Circle作为Radius,您可以替换这两行:

constructor argument

使用:

cirArea.emplace_back(); 
cirArea.back().setRadius(cirRadius);