initializer_list 允许在此构造函数中进行哪种初始化?
What sort of initialization does initializer_list allow for in this constructor?
我正在使用 GUI 库来编写我正在阅读的教科书。其中一个用于 'Lines' 对象的构造函数具有以下代码。
struct Lines : Shape { // independent lines
Lines() {}
Lines(initializer_list<Point> lst) : Shape{lst} { if (lst.size() % 2) error("odd number of points for Lines"); }
void draw_lines() const;
void add(Point p1, Point p2) { Shape::add(p1); Shape::add(p2); }
};
我尝试了以下初始化,但它显示 E0289 错误,说明
no instance of constructor "Graph_lib::Lines::Lines" matches the argument list
Lines li{ {Point{100,100},Point{200,200}},{Point{150,150},Point{250,250}}};
我想知道 initializer_list
在这种情况下应该如何工作,以及在构造对象时我应该如何使用它。
您实际上超过了 两个 initializer_list
。此构造未定义,因此出现编译错误。
Lines li{ {Point{100,100},Point{200,200}} , {Point{150,150},Point{250,250}} };
// ^-----------------------------^ first
// ^-----------------------------^ second
应编译以下更改:
在构造函数中使用嵌套的初始化列表:
Lines(initializer_list<initializer_list<Point>> lst)
或 在构造函数中添加第二个参数,接受另一个初始化列表:
Lines(initializer_list<Point> lst, initializer_list<Point> lst2)
或将调用中的两个初始化列表组合成一个。
Lines li{ { Point{100,100}, Point{200,200}, Point{150,150}, Point{250,250} } };
// ^----------------------------------------------------------------^
// one initializer-list
I want to know how the initializer_list
is supposed to work in this context and how I am supposed to use it when constructing an object.
鉴于教科书提供了 class 定义,您可能正在寻找上面的 #3,其中 Point
被分组为 一个 initializer-list
.
我猜它的 GUI 端可能被实现为 连接后续点形成连接线,而不是接受 成对的点形成单独的线。
我正在使用 GUI 库来编写我正在阅读的教科书。其中一个用于 'Lines' 对象的构造函数具有以下代码。
struct Lines : Shape { // independent lines
Lines() {}
Lines(initializer_list<Point> lst) : Shape{lst} { if (lst.size() % 2) error("odd number of points for Lines"); }
void draw_lines() const;
void add(Point p1, Point p2) { Shape::add(p1); Shape::add(p2); }
};
我尝试了以下初始化,但它显示 E0289 错误,说明
no instance of constructor "Graph_lib::Lines::Lines" matches the argument list
Lines li{ {Point{100,100},Point{200,200}},{Point{150,150},Point{250,250}}};
我想知道 initializer_list
在这种情况下应该如何工作,以及在构造对象时我应该如何使用它。
您实际上超过了 两个 initializer_list
。此构造未定义,因此出现编译错误。
Lines li{ {Point{100,100},Point{200,200}} , {Point{150,150},Point{250,250}} };
// ^-----------------------------^ first
// ^-----------------------------^ second
应编译以下更改:
在构造函数中使用嵌套的初始化列表:
Lines(initializer_list<initializer_list<Point>> lst)
或 在构造函数中添加第二个参数,接受另一个初始化列表:
Lines(initializer_list<Point> lst, initializer_list<Point> lst2)
或将调用中的两个初始化列表组合成一个。
Lines li{ { Point{100,100}, Point{200,200}, Point{150,150}, Point{250,250} } }; // ^----------------------------------------------------------------^ // one initializer-list
I want to know how the
initializer_list
is supposed to work in this context and how I am supposed to use it when constructing an object.
鉴于教科书提供了 class 定义,您可能正在寻找上面的 #3,其中 Point
被分组为 一个 initializer-list
.
我猜它的 GUI 端可能被实现为 连接后续点形成连接线,而不是接受 成对的点形成单独的线。