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

时间:2016-11-15 13:43:54

标签: c++ function pointers lambda reference

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

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”函数参数中删除引用,则代码可以正常工作。但我不明白为什么它首先不起作用。
如何在不删除参数引用的情况下修复代码?

谢谢你的时间。

2 个答案:

答案 0 :(得分:2)

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

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

您可以声明参数

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

以避免消息。

临时对象可能不会绑定到非常量引用。

答案 1 :(得分:1)

Array Array::operator+=(const int a) {
    std::function<int(int)> my_f([&a](int b) { return b + a; });
    return transform(my_f);
}