因此,以下是与错误相关的代码部分:
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”函数参数中删除引用,则代码可以正常工作。但我不明白为什么它首先不起作用。
如何在不删除参数引用的情况下修复代码?
谢谢你的时间。
答案 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);
}