【发布时间】:2019-10-02 01:32:21
【问题描述】:
我了解 lambda 函数的工作原理。问题是程序在编译器推断出“auto”应该是什么之前调用了函数 recursiveFunction()。问题是,它是一个递归函数,所以函数本身就在定义中。
#include <iostream>
using namespace std;
template <class T>
class Class {
public:
int foo(int x);
};
template <class T>
int Class<T>::foo(int x) {
auto recursiveFunction = [=](int n)->int {
if (n <= 1) return 1;
else return n*recursiveFunction(n-1);
};
return recursiveFunction(x);
}
int main() {
Class<int> c;
cout << c.foo(5) << endl;
return 0;
}
我还使用一个使用模板的类来实现这一点,以防问题出现。
这是错误信息:
main.cpp: In instantiation of 'int Class<T>::foo(int) [with T = int]':
main.cpp:21:20: required from here
main.cpp:14:40: error: use of 'recursiveFunction' before deduction of 'auto'
else return n*recursiveFunction(n-1);
谢谢!
【问题讨论】:
-
我其实不明白为什么你需要使用
auto而不是像function<int(int)>这样清楚地写类型签名。我的意思是,当我们创建一个递归函数时,我们通常需要知道返回值是什么,以便我们可以使用它并重新调用该函数,对吗? -
赞成,因为它带有一个最小的例子! (特别值得一提的是新贡献者。)
-
@WisnuAdiNurcahyo 是的 - 我也在想同样的事情。我不知道
function<int(int)>存在...谢谢! -
@SamWilliams 当然。祝你有美好的一天!