Я знаю, что было опубликовано много вопросов о перегрузке операторов, но я не могу заставить свой код работать с любым из найденных примеров. Да, я взглянул на эта ссылка, но у меня все еще есть проблемы с пониманием этого.
Я пытаюсь перегрузить только префиксный оператор, но я получаю сообщение об ошибке, говорящее, что postfix ожидает int. Я не пытаюсь изменить постфиксный оператор.
У меня есть файл .h и файл .cpp. Внутри моего .h файла у меня есть что-то вроде:
class X{
public:
/* ... declarations of X ... */
X& operator--(X& x);
};
И внутри моего файла .cpp у меня есть что-то вроде:
#include "X.h"namespace X{
X& X::operator--(X& x){/*...*/}
}
Может кто-нибудь сказать мне, что я делаю неправильно?
Префикс --
Оператор не принимает аргументов. Его определение должно быть следующим:
public:
/* ... declarations of X ... */
X& operator--();
};
И аналогично при его реализации:
#include "X.h"namespace X {
X& X::operator--() {/*...*/}
}
X& operator--(X& x);
Должно быть:
X& operator--();
Справочная информация: компилятор видит, что вы дали --
оператор аргумент. Постфиксная версия --
принимает аргумент, поэтому он думает, что вы имеете в виду тот. Но тип этого аргумента должен по соглашению int
, Так что это говорит вам именно это: postfix 'X& X::operator--(X&)' must take 'int' as its argument
,
Компилятор мог также скажу вам что-то вроде prefix 'X& X::operator--(X&)' must not take any argument
если бы захотел. Ну да ладно. Так оно и есть. Создание любого диагностического сообщения достаточно для соответствия стандарту C ++.