【发布时间】:2021-02-15 01:40:14
【问题描述】:
我试图递归地使用 lambda 函数,如下所示。
#include <iostream>
#include <functional>
using namespace std;
int main()
{
std::function<int(int)> x = [](int y) -> int {
if(y == 0) {
return 0;
} else {
return y + x(--y);
}
};
cout << x(3) << endl;
}
但它会抛出错误。
main.cpp: In lambda function:
main.cpp:20:24: error: ‘x’ is not captured
return y + x(--y);
^
main.cpp:16:34: note: the lambda has no capture-default
std::function<int(int)> x = [](int y) -> int {
^
main.cpp:16:29: note: ‘std::function x’ declared here
std::function<int(int)> x = [](int y) -> int {
^
这是因为编译器到达 x(--y) 时 x 没有完全定义而引发错误吗?谁能告诉我如何解决这个问题。
【问题讨论】:
-
您是否尝试按照错误消息中的说明捕获
x?[&x](int y) -> int { /* ... */ } -
我宁愿使用普通函数。您正在尝试捕获尚未声明的内容。这是它自己的 lambda 函数。
-
请参阅此答案的“捕获变量”部分stackoverflow.com/a/7627218/9716597
-
当我尝试捕获为 &x 时,它给出的输出为 '3'。但它的输出应该是 6 (3 + 2 + 1)。
-
@kadina 将
x(--y)更改为x(y-1)以避免未排序的点问题。
标签: c++