我创建了一个parameterizd构造函数区域。我用area来初始化对角点。在int主要部分中,我无法调用构造函数。请更正我的代码并解释错误:
int main()
{
int ab,p,q,r,s,l,m,n,o;
cout<<"Enter the number of rectangles: ";
cin>>ab;
for (int i=0; i<ab; i++)
{
cout<<"For rectangle "<<i+1<<endl;
cout<<"Enter the starting and ending values of the 1st diagonal: ";
cin>>p>>q>>r>>s;
cout<<"Enter the starting and ending values of the 2nd diagonal: ";
cin>>l>>m>>n>>o;
area obj[i](p,q,r,s,l,m,n,o);
obj[i].findArea();
obj[i].display();
}
return 0;
}
答案 0 :(得分:3)
只写:)
area obj(p,q,r,s,l,m,n,o);
obj.findArea();
obj.display();
至于声明
area obj[i](p,q,r,s,l,m,n,o);
那么你可能不会这样初始化数组。在循环中定义数组没有意义。
答案 1 :(得分:1)
假设数组obj
应该在循环之外使用,我建议使用std::vector
代替,在循环之前声明。那你有两个选择:
声明向量和reserve足够的内存(因此在添加新元素时不必重新分配数据),然后调用emplace_back
添加新元素。
std::vector<area> obj;
obj.reserve(ab);
for (int i=0; i<ab; i++)
{
...
obj.emplace_back(p,q,r,s,l,m,n,o);
}
声明具有正确大小(ab
)的向量并将所有元素默认构造,然后使用简单赋值将实际对象复制到位。这要求area
可以是默认构造的,并且可以是复制赋值或移动赋值运算符。
std::vector<area> obj{ab};
for (int i=0; i<ab; i++)
{
...
obj[i] = area(p,q,r,s,l,m,n,o);
}
如果不想要一个数组(或向量),并且循环中的每个对象应该只存在于循环中,并且在循环之后不需要使用任何东西,只需声明对象使用构造函数的正确参数:有关如何执行此操作,请参阅the answer from Vlad from Moscow。