Конструктор std :: initializer_list, приводящий к ошибкам компилятора C3202, C2661 и C2976 - PullRequest
0 голосов
/ 11 мая 2019

Я использую графическую библиотеку, включенную в учебник по 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 позволяет инициализировать объект с несколькими элементами одного типа в качестве параметров.

1 Ответ

0 голосов
/ 11 мая 2019

Сначала для std::pair вы должны указать два типа: std::pair<Point, Point>.

Во-вторых, вы должны передать std::initializer_list в качестве единственного аргумента:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...