参数参数的函数不能与其他函数返回的值一起使用

时间:2012-12-19 17:19:54

标签: c++ function object reference

我有Messageable::receiveMessage(Message&)。当我使用它时,我希望能够将它传递给Message,我将它传递给函数返回的Message,但当我这样做时,我得到

error: no matching function for call to 'Messageable::receiveMessage(Message)'
no known conversion for argument 1 from 'Message' to 'Message&'

只有当我使用重载的&lt;&lt; (因为它返回一个Message&amp;,即:receiveMessage(myMsg<<value);

我可能/我可能做错了,或者只是不在标准中允许从函数返回的值?我认为当你声明一个引用参数时,你可以使用该对象本身并且它会被自动转换(只是区别,它没有被复制),并且我看不出它是否来自一个函数。< / p>

(我知道这个问题之前可能已经回答了,但是我的搜索只出现了链接器错误“未定义的引用”)

错误的代码是receiveMessage( action->second->message() );

1 个答案:

答案 0 :(得分:2)

  

我可能/我可能做错了什么?

您没有发布导致错误的代码,这意味着我们只能猜出错误。

最有可能的是,您正在尝试将一个临时对象(函数调用或其他表达式的结果)传递给该函数。该函数采用非const lvalue 引用,不能绑定到临时引用。

解决方案:

  • 更改函数以引用const:receiveMessage(Message const &)。如果函数不需要更改它,这只是一个选项。
  • 传递命名变量而不是临时对象。