Ошибка candidate expects 3 arguments, 1 provided

Реализовал класс треугольника,

class Triangle : public Shape
{
public:
  Triangle (const point_t &point_A, const point_t &point_B , const point_t &point_C);
  double getArea () const override;
  point_t getCentre () const;
  void move (const double x, const double y) override ;
  void move (const point_t &point) override;
  rectangle_t getFrameRect() const override;
  void show () const override;
private:
  point_t point_A, point_B, point_C;
  point_t centre;
  point_t calculateCentre();
};

В функции getFrameRect() использую версию функций min max, принимающую 3 и более аргументов

rectangle_t Triangle::getFrameRect() const
{
    double left = std::min({point_A.x, point_B.x, point_C.x});
    double right = std::max({point_A.x, point_B.x, point_C.x});
    double low = std::min({point_A.y, point_B.y, point_C.y});
    double high = std::max({point_A.y, point_B.y, point_C.y});
  return rectangle_t{ right - left, high - low, { (right + left) / 2, (high + low) / 2 } };
}

Выдает ошибку: candidate expects 3 arguments, 1 provided.

Заголовочные файлы: Base-types.hpp


#ifndef base_types_h
#define base_types_h

struct point_t
{
  double x;
  double y;
};

struct rectangle_t
{
  double width;
  double height;
  point_t pos;
};
#endif

shape.hpp


#ifndef shape_h
#define shape_h
#include "base-types.hpp"
#include <iostream>

class Shape
{
public:
  virtual ~Shape () = default;
  virtual double getArea () const = 0;
  virtual rectangle_t getFrameRect () const = 0;
  virtual void move (const point_t &point)  = 0;
  virtual void move (const double x, const double y)  = 0;
  virtual void show () const = 0;
};

#endif /* shape_h */

Ответы (1 шт):

Автор решения: riot

Попробуйте привести минимальный воспроизводимый пример, потому что для std::max({1., 2., 3.}), т.е. для нахождения максимума в листе даблов всё должно работать.

Вы передаёте 1 аргумент функциям - std::initializer_list. Такая перегрузка есть, но будет работать только если point_t могут быть сравнимы, ведь это отдельный класс у вас. Так что либо добавьте кастомный компаратор в функции, либо реализуйте оператор < для класса point_t.

Также лучше воспользоваться std::minmax, чтобы сразу найти минимум и максимум, а не 2 раза делать цикл по тем же данным.

→ Ссылка