Путаница перегрузки оператора

Я знаю, что было опубликовано много вопросов о перегрузке операторов, но я не могу заставить свой код работать с любым из найденных примеров. Да, я взглянул на эта ссылка, но у меня все еще есть проблемы с пониманием этого.

Я пытаюсь перегрузить только префиксный оператор, но я получаю сообщение об ошибке, говорящее, что 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){/*...*/}
}

Может кто-нибудь сказать мне, что я делаю неправильно?

0

Решение

Префикс -- Оператор не принимает аргументов. Его определение должно быть следующим:

public:
/* ... declarations of X ... */
X& operator--();
};

И аналогично при его реализации:

#include "X.h"namespace X {
X& X::operator--() {/*...*/}
}
2

Другие решения

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 ++.

1

По вопросам рекламы [email protected]