I have Messageable::receiveMessage(Message&). When I use it, I’d expect to to be able to pass it a Message, I pass it a Message returned from a function, but when I do I get
error: no matching function for call to 'Messageable::receiveMessage(Message)'
no known conversion for argument 1 from 'Message' to 'Message&'
It only works when I use my overloaded << (because it returns a Message&, ie: receiveMessage(myMsg<<value); )
What could I be/am I likely doing wrong, or is it just not in the standard to allow a value returned from a function? I thought that when you declared a reference argument, you could use the object itself and it’s automatically casted (only difference, that it isn’t copied), and I fail to see a difference on whether it comes from a function or not.
(I’m aware this question is likely answered before, but my searches only came up with the linker error “undefined reference”)
The code at fault was receiveMessage( action->second->message() );
You’re not posting the code that causes the error, meaning that we can only guess what’s wrong.
Most likely, you’re trying to pass a temporary object – the result of a function call or other expression – to the function. The function takes a non-const lvalue reference, which can’t be bound to a temporary.
Solutions:
receiveMessage(Message const &). This is only an option if the function doesn’t need to change it.