ошибка: постфикс «unaryOperators unaryOperators :: operator ++ (const unaryOperators &)» должен принимать «int» в качестве аргумента - PullRequest
3 голосов
/ 03 января 2012

unaryOperators operator++ (const unaryOperators &one);
Для этого, объявленного внутри класса, я должен получить ошибку «слишком много аргументов» и т. Д., Но я получаю ошибку:

error: postfix ‘unaryOperators unaryOperators::operator++(const unaryOperators&)’ must take ‘int’ as its argument

Почему должен принимать в качестве аргумента "int" ? Что это значит?

GCC Linux

Ответы [ 4 ]

5 голосов
/ 03 января 2012

С здесь :

Поскольку операторы prefix и postfix ++ могут иметь два определения, язык C ++ дает нам две разные подписи. Оба называются operator ++ (), но префиксная версия не принимает параметров, а постфиксная версия принимает фиктивный int.

5 голосов
/ 03 января 2012

Есть 2 разных оператора для приращения, постфикса и префикса.

Перегрузка postfix принимает фиктивный параметр int, чтобы отличить его.

T& operator ++(T& a);     //prefix
T operator ++(T& a, int); // postfix
3 голосов
/ 03 января 2012

Есть два ++ оператора. Один принимает нулевые параметры (префикс), а другой - один параметр int (постфикс). Компилятор считает, что вам нужен второй (обратите внимание на слово 'postfix' в сообщении об ошибке), и он сообщает вам, что тип параметра неверен. Из вашей путаницы кажется, что попытка компилятора быть полезной была ошибочной, и вы действительно хотели первый.

2 голосов
/ 03 января 2012

Если вы хотите перегрузить префиксный оператор (++x), это можно сделать так:

  • Нестатическая функция-член без параметров, operator++();или
  • Не являющаяся членом функция с одним параметром, operator++(const unaryOperators &).

Если вы объявляете ее как функцию-член с параметром, она интерпретируется как объявление оператора postfix(x++);однако постфиксный оператор должен быть объявлен с фиктивным аргументом типа int, а не с вашим типом, следовательно, с ошибкой.

Итак, либо удалите аргумент функции, и оператор будет действовать на this;или переместите функцию за пределы класса;или сделайте его friend, если ему нужен доступ к частным лицам типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...