考虑链接列表节点的以下定义:
struct Node
{
int data;
struct Node *next;
};
我是c ++的新手,来自函数式编程。我希望写一个lambda来计算链表的长度。 我写道:
auto listLength = [](Node * list){
if(list == NULL) return 0;
else return 1 + listLength(list -> next);
};
error: variable 'lengthList' declared with 'auto' type cannot appear in its own initializer
如果我从 auto 更改为 int ,我会得到:
error: called object type 'int' is not a function or function pointer
问题是什么?
答案 0 :(得分:2)
问题有两个:
1)lambda需要捕获在lambda之外定义的任何对象。
2)listLength
的定义直到整个变量声明结束才完成。
这是一种鸡蛋与鸡蛋的问题。最干净的解决方案是使用std::function
:
#include <functional>
std::function< int (Node *)> listLength;
listLength = [&](Node * list){
if(list == NULL) return 0;
else return 1 + listLength(list -> next);
};