c++ - 带有引用参数的函数不能处理从其他函数返回的值

标签 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&'

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

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

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

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

最佳答案

What could I be/am I likely doing wrong?

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

很可能,您正在尝试将临时对象(函数调用或其他表达式的结果)传递给函数。该函数采用非常量 lvalue 引用,不能绑定(bind)到临时值。

解决方案:

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

关于c++ - 带有引用参数的函数不能处理从其他函数返回的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13957709/

相关文章:

c - 编写一个 C 程序来判断给定的字符串是否是 Lucky

javascript - 如何使用键值从两个对象创建第三个对象

c++ - 使用 BOOST ASIO 缓冲器

c++ - 跟踪编译器以查看它在某些文件上花费了多少时间

c - 在 C 语言中无限猜谜游戏中记分

javascript - 试图让元素在点击后出现一次,但出现不止一次

javascript - 基于 JavaScript 中的另一个列表更新列表

javascript - 如果数组包含 2 个相同的对象,则改变第二个(或第三个、第四个)对象的值

c++ - 在 public const 方法中访问私有(private)成员

c++ - 模板实例化解析错误