【发布时间】:2019-09-28 22:58:04
【问题描述】:
我正在使用 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 构造函数允许使用与参数相同类型的多个元素来初始化一个对象。
【问题讨论】:
-
请显示minimal reproducible example。请注意,您没有在代码示例中创建初始化列表
标签: c++ class c++11 constructor stdinitializerlist