gpt4 book ai didi

函数作为参数的 C++ 错误,对非常量的引用的初始值必须是左值

转载 作者:行者123 更新时间:2023-11-30 02:28:35 24 4
gpt4 key购买 nike

因此,这是与错误相关的代码部分:

Array Array::transform(std::function<int(int)>&f)
{
std::for_each(niz, niz + n, [&f](Tacka &r) {r.setX(f(r.getX())), r.setY(f(r.getY())); });
return *this;
}

Array Array::operator+=(const int a)
{
return transform([&a](int b) { return b + a; });
}

尝试将 lambda 函数作为参数发送时出现错误。

如果我从“transform”函数参数中删除一个引用,代码就可以工作。但我不明白为什么它一开始就不起作用。
如何在不从参数中删除引用的情况下修复代码?

感谢您的宝贵时间。

最佳答案

您调用方法 transform 并将类型为 std::function 的对象作为创建 lambda 类型的临时对象的表达式传递。

return transform([&a](int b) { return b + a; });
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

你可以这样声明参数

const std::function<int(int)>&f

避免消息。

临时对象不能绑定(bind)到非常量引用。

关于函数作为参数的 C++ 错误,对非常量的引用的初始值必须是左值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40611386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com