Страницы

Поиск по вопросам

суббота, 20 апреля 2019 г.

В чем ошибка при перегрузке оператора+?

Перегружаю бинарный + в своем классе:
MyClass operator+(const MyClass &a, const MyClass &b) { ... return a.value + b.value; }
Получаю ошибку бинарный оператор + имеет слишком много параметров. В чем проблема? Везде указывается именно такая сигнатура перегрузки этого оператора.


Ответ

Каждая не статическая функция-член класса имеет неявный параметр, который получает значение this, то есть указатель на сам объект класса.
Вам надо либо этот оператор определить в классе как дружественную функцию (если требуется обращение к закрытым или защищенным членам класса), например
friend MyClass operator+(const MyClass &a, const MyClass &b) { ... return a.value + b.value; }
Или объявить ее как обычную функцию вне класса, если не требуется обращение к закрытым или защищенным членам класса.
Либо сделать оператор функцией-членом класса, но с одним явным параметром
MyClass operator+( const MyClass &b) const { ... return this->value + b.value; }

Комментариев нет:

Отправить комментарий