Чтобы использовать методы и член объекта, вам сначала нужно создать этот объект. Если вы его не создали (переменная, которая должна содержать объект, не инициализируется), но вы пытаетесь использовать его методы или переменные, вы получите эту ошибку.
Иногда вы можете просто забыть инициализировать .
Отредактировано: new не может вернуть значение null, но исключение огня при ошибке. Давно это было на некоторых языках, но не больше. Спасибо @John Saunders за указание на это.
Предварительные и последующие приращения представляют собой два разных оператора и требуют отдельных перегрузок.
C ++ не допускает перегрузки только по типу возврата, поэтому наличие разных типов возвращаемых данных, как в вашем примере, не будет достаточно для устранения двусмысленности двух методов.
Фиктивный аргумент - это механизм, который разработчик C ++ выбрал для устранения неоднозначности.
В C ++ функции / методы не могут быть перегружены возвращаемым типом, только по списку параметров. Игнорируя тот факт, что операторы префикса и постфикса являются операторами, представьте, были ли они просто простыми другими функциями, как будет работать компилятор, который будет использоваться на основе возвращаемого типа? Например,
int x = 2;
const int DoIt()
{
return 1;
}
int& DoIt()
{
return x;
}
int y = DoIt();
Поскольку перегрузки операторов на самом деле являются просто функциями в глубине души, компилятор не может отличить их от типа возврата.
См. http: // www.parashift.com/c++-faq-lite/operator-overloading.html#faq-13.14
Оператор, как и любая функция, идентифицируется сигнатурой. Тип возврата и модификаторы перед именем функции / оператора не включаются в это. Имена ваших операторов здесь
operator++()
operator++(int)
Это единственный способ, которым компилятор отличает эти два. Что касается возвращаемых значений Digit&
и Digit
; Они необходимы из-за того, что предполагается использовать ++ x и x ++.
В Pre-Increment / Decrement и Post-Increment / Decment разница основана только на фиктивном параметре в перегруженной функции
operator++() => Prefix Increment
operator--() => Prefix Decrement
operator++(int) => Postfix Increment
operator--(int) => Postfix Decrement
тип возврата может быть таким же. вы также можете обратиться: http://www.tutorialspoint.com/cplusplus/increment_decrement_operators_overloading.htm