我正在使用 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 构造函数允许使用与参数相同类型的多个元素来初始化一个对象。