如何在c++中用构造函数初始化结构的列表



我有一个带有构造函数的结构,比如:

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)
{}

最新更新