initializer_list在此构造函数中允许什么样的初始化?

时间:2019-03-31 05:08:33

标签: c++ constructor initializer-list

我正在为正在阅读的教科书使用GUI库。用于其中“ Lines”对象的构造函数之一具有以下代码。

fun getSubtree(x,ctree) =
   case ctree of
         Empty => Empty
      | Node(y,left,right) => if(nodeExist (x,ctree)) = true then Node(x,left,right) else Empty;

我已经尝试了以下初始化,但是显示E0289错误,指出

  

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

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}}}; 在这种情况下应该如何工作,以及在构造对象时应该如何使用它。

1 个答案:

答案 0 :(得分:6)

您实际上通过了两个initializer_list 。没有定义此构造,因此会产生编译错误。

Lines li{ {Point{100,100},Point{200,200}} , {Point{150,150},Point{250,250}} };
//        ^-----------------------------^                                       first        
//                                          ^-----------------------------^     second        

以下更改应编译:

  1. 构造函数中使用嵌套的初始化程序列表:

    Lines(initializer_list<initializer_list<Point>> lst)
    
  2. OR 构造函数中添加第二个参数,接受另一个初始化列表:

    Lines(initializer_list<Point> lst, initializer_list<Point> lst2)
    
  3. OR 调用中的两个初始化列表合并为一个。

    Lines li{ { Point{100,100}, Point{200,200}, Point{150,150}, Point{250,250} } };
    //        ^----------------------------------------------------------------^
    //        one initializer-list
    
  

我想知道initializer_list在这种情况下应该如何工作,以及在构造对象时应该如何使用它。

鉴于类定义是由教科书提供的,您可能会在上面的#3中寻找,其中Point被分组为一个 initializer-list。 / p>

我猜想它的GUI端可能是实现 连接形成连接线的后续点 ,而不是接受形成单独线的对点< / em>。