Invalid initialization of non-const reference of type

c++, lvalue-to-rvalue, pass-by-reference

Solution

Simply make your print function take your argument by `const&`. This is also logically right as it doesn't modify your argument.

void printAge(const Person &person) {
   cout << "Age: " << person.age << endl;
}

The actual problem is the other way around. You are passing a temporary(rvalue) to a function which expects an lvalue.

Problem

In the following code, I'm not able to pass a temporary object as argument to the `printAge` function: ``` struct Person { int age; Person(int _age): age(_age) {} }; void printAge(Person &person) { cout << "Age: " << person.age << endl; } int main () { Person p(50); printAge(Person(50)); // fails! printAge(p); return 0; } ``` The error I get is: ``` error: invalid initialization of non-const reference of type ‘Person&’ from an rvalue of type ‘Person’ ``` I realize that this is something to do with passing an lValue to a function expecting a rValue... Is there a way to convert my lValue to rValue by using std::move or something? I tried taking a constant parameter, but that does not seem to work.

Original source