0

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

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

它仅在我使用重载 << 时才有效(因为它返回 Message&,即receiveMessage(myMsg<<value);:)

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

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

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

4

1 回答 1

2

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

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

最有可能的是,您试图将临时对象(函数调用或其他表达式的结果)传递给函数。该函数采用非常量左值引用,它不能绑定到临时值。

解决方案:

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