gpt4 book ai didi

c++ - 成员引用基类型 'double' 不是结构或 union

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:32 24 4
gpt4 key购买 nike

我是 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);
~~~~~~~~~~^~~~~~~~~~

最佳答案

您不能创建“大小不是常量”的静态分配数组。第二个问题是 cirArea 不是 Circle 类型,而是 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;
}

但更好的做法是使用 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';
}
}

http://cpp.sh/3l7ti

关于c++ - 成员引用基类型 'double' 不是结构或 union ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36149384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com