Ошибка 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 шт):
Попробуйте привести минимальный воспроизводимый пример, потому что для std::max({1., 2., 3.}), т.е. для нахождения максимума в листе даблов всё должно работать.
Вы передаёте 1 аргумент функциям - std::initializer_list. Такая перегрузка есть, но будет работать только если point_t могут быть сравнимы, ведь это отдельный класс у вас. Так что либо добавьте кастомный компаратор в функции, либо реализуйте оператор < для класса point_t.
Также лучше воспользоваться std::minmax, чтобы сразу найти минимум и максимум, а не 2 раза делать цикл по тем же данным.