我是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)
您无法创建“大小不恒定”的静态分配数组。第二个问题是cirArea
不是Circle
type 而是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)
归档时间: |
|
查看次数: |
4313 次 |
最近记录: |