我有一个带有构造函数的结构,比如:
struct Rectangle
{
int width;
int height;
Rectangle(int _width, int _height)
{
width = _width;
height = _height;
}
}
我创建了一个可以使用的矩形:Rectangle rect = Rectangle(4, 8);
但是如何用构造函数Rectangle rects[10];
创建一个列表矩形结构
这是一个错误:类"不存在默认构造函数;矩形";。
如果我在结构中定义构造函数,它是否不允许创建列表?
我该如何修复它?
谢谢!
;无默认构造函数";意味着没有构造函数接受没有参数。你有一个需要2。编译器不能只编值,它需要确切地知道要提供什么值。
通过调整签名以包含默认值,您可以很容易地将其作为默认构造函数:
Rectangle(int _width = 0, int _height = 0)
现在它可以作为默认值使用。
我认为问题的精神可能植根于您以更像Java或C#的方式思考数组。
当你在C++中说Rectangle[10]时,它直接分配了10个连续的矩形对象,在这种情况下是在内存中的堆栈上。如果你没有构造函数,它会使用"默认"构造函数,将x和y成员设置为它们的"默认"值(顺便说一句,这些值不是0(。
由于您已经指定了一个构造函数,编译器推断您希望使用这两个值实例化类!
如果你想为这种情况提供一个默认的构造函数,试试这个:
矩形((:x(0(,y(0({}
我创建了一个矩形:矩形rect=矩形(4,8(;
当然:但我会这样做:
Rectangle rect{4, 8};
这个表格马上就有用了。
但是如何用构造函数创建一个列表矩形结构:矩形矩形[10];
Rectangle rects[10] = {{1,2}, {2,3}, {3,4}, {4,5}, {6,7}, {1,2}, {2,3}, {3,4}, {4,5}, {6,7}};
这是一个错误:类"不存在默认构造函数;矩形";。
这是因为:
Rectangle rects[10]; // creates 10 Rectangles.
// There is no constructor with zero arguments
// so it can not create them
这里有几个选项:
// This allows multiple ways to construct a rect.
Rectangle(int _width = 0, int _height = 0)
: width(_width)
, height(_height)
{}