Ошибка компиляции в C++: перегруженные функции имеют похожие преобразования
Я хотел сделать перегрузку оператор ==, что бы сравнить 2 объекта класса. Но у меня выдаёт ошибку.
Код:
#include <iostream>
using namespace std;
class Point
{
private:
int x;
int y;
public:
Point(int x, int y)
{
this->x = x;
this->y = y;
}
void PrintInfo()
{
printf("Точка имеет координаты [%d;%d]\n", x, y);
}
bool operator == (const Point& object)
{
return (x == object.x) && (y == object.y);
}
};
int main()
{
setlocale(LC_ALL, "ru");
Point a(5, 1);
Point b(9, 4);
bool result = a == b;
cout << result << endl;
}
Сама ошибка:
Надеюсь на помощь и объяснение, почему данная ошибка возникает:) Спасибо за внимание!
Ответы (1 шт):
Да исправить-то его несложно, надо просто не лениться и не скупиться на const везде, где можно :)
bool operator == (const Point& object) const
и далее по тексту...
А вот откуда C2666 — лично мне пока не очень понятно, вроде ничему из описанного по ссылке ситуация не соответствует. И что значит
может быть "bool Point::operator ==(const Point &)" [синтезированное выражение "y == x"].
Был бы признателен пояснениям гуру в стандартах.
P.S. Для неверующих в ошибку...
Да, если поставить ключик стандарта c++17 или с++14, то ошибки нет. Но при c++20 здесь есть ошибка. Вот потому и прошу гуру пояснить, что там такого, в С++20, добавилось.

