Return value of operator++
c++
Solution
You attempt to apply the second `++` to the temporary object returned by the first invocation. However, the operand must be passed by reference, and you can't bind a temporary to a non-constant lvalue reference.
You probably don't want to "fix" this, since there's little reason to modify a temporary value like that. However, you should return a copy of the value before incrementing it, to give the expected post-increment behaviour.
The prefix operator should return a reference, which can be happily bound to another reference so that `++++x;` should work as expected.
Problem
I have the following code that is broken. I can fix it by modifying certain line in code (see the comment). What is the cause of the problem? ``` #include <iostream> using namespace std; class Number{ public: int n; Number(int a):n(a){} //when I change the following to //friend Number& operator++(Number& source, int i) //then it compiles fine and correct value is printed friend Number operator++(Number& source, int i){ ++source.n; return source; } }; int main() { Number x(5); x++++; //error: no 'operator++(int)' declared for postfix '++' [-fpermissive] cout<<x.n; return 0; } ```