оператор + ошибка перегрузки. Невозможно вернуть ссылку на объект - PullRequest
0 голосов
/ 20 января 2019

Есть класс:

class MyClass
{
private:
    double value;
public:
    MyClass()
    {
        this->value = 0;
    }

    MyClass(double value)
    {
        this->value = value;
    }

    MyClass& operator + (MyClass & outerObj);
};

Почему эта перегрузка работает:

MyClass& MyClass::operator + (MyClass & outerObj)
{
    MyClass retObject(this->value + outerObj.value);
    return retObject;
}

Но разве это не так?

MyClass& MyClass::operator + (MyClass & outerObj)
{
    return MyClass(this->value + outerObj.value);
}

VC ++ выдает предупреждение:

MyClass :: MyClass (двойное значение)

+ 3 перегрузки

начальное значение ссылки на неконстантное значение должно быть lvalue

Я не могу понять, в чем проблема. В конце концов, это возвращает по существу то же самое.

1 Ответ

0 голосов
/ 20 января 2019

Проблема первого фрагмента кода: вы пытаетесь вернуть ссылку, привязанную к локальному объекту. Локальная переменная будет уничтожена при выходе из функции, тогда возвращаемая ссылка всегда будет зависать.

Проблема второго фрагмента кода: вы пытаетесь связать временный объект с lvalue-ссылкой на неконстантный, который неправильно сформирован.

Вам следует изменить operator+ с возврата по ссылке на возвращаемое по значению, что обеспечит нормальную работу как возвращаемого локального, так и временного объекта и избавит вас от вышеуказанных проблем. например,

MyClass MyClass::operator + (const MyClass & outerObj) const {
    ...
}
...