Проблема первого фрагмента кода: вы пытаетесь вернуть ссылку, привязанную к локальному объекту. Локальная переменная будет уничтожена при выходе из функции, тогда возвращаемая ссылка всегда будет зависать.
Проблема второго фрагмента кода: вы пытаетесь связать временный объект с lvalue-ссылкой на неконстантный, который неправильно сформирован.
Вам следует изменить operator+
с возврата по ссылке на возвращаемое по значению, что обеспечит нормальную работу как возвращаемого локального, так и временного объекта и избавит вас от вышеуказанных проблем. например,
MyClass MyClass::operator + (const MyClass & outerObj) const {
...
}