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