-1

我正在使用 C++ 教科书中包含的图形库,它对应该创建由直线组成的对象的形状具有以下定义。

 struct Lines : Shape {  // independent lines
    Lines() {}
    Lines(initializer_list<Point> lst)
        : Shape{ lst }
    {
        if (lst.size() % 2)
            error("odd number of points for Lines");
    }
    Lines(initializer_list<pair<Point>> lst)
    {
        for (auto p : lst) add(p.first, p.second);
    }
    void draw_lines() const;
    void add(Point p1, Point p2) { Shape::add(p1); Shape::add(p2); }
}

但是,当我尝试创建 Lines 结构的实例时,如下所示:

Lines rec(Point{ 200,200 }, Point{ 100,100 }, Point{350,250});

我收到错误 C2976、C2228 和 C3202,说明:

C2976 - “std::pair': 模板参数太少”

C2228 - “pair”:非特化类模板不能用作模板参数 '_Elem' 的模板参数,需要一个真实类型”

C2661 - “Graph_lib::Lines::Lines':没有重载函数需要 3 个参数”

我的印象是 initializer_list 构造函数允许使用与参数相同类型的多个元素来初始化一个对象。

4

1 回答 1

0

首先,std::pair您应该指定两种类型:std::pair<Point, Point>.

其次,您应该std::initializer_list作为单个参数传递:

Lines rec({ Point{ 200,200 }, Point{ 100,100 }, Point{350,250} });

于 2019-05-11T07:20:20.823 回答