以下代码重现了我在使用 lambda 函数时遇到的错误。
#include <iostream>
#include <functional>
#include <vector>
#include <math.h>
typedef double Fct(double);
struct Function {
Function(Fct f, double r_min, double r_max, int points = 100)
{
double step = (r_max-r_min)/points;
double r = r_min;
for (int i = 0; i < points; ++i) {
y.push_back(f(r));
r += step;
}
}
void plot() const
{
for (double x:y)
std::cout << x << '\n';
}
private:
std::vector<double> y;
};
int main()
{
Function f1{[](double x){return std::cos(x);},1, 10,10};
f1.plot();
//The following does not work
int k = 2;
Function f2{[k](double x){return std::sin(k*x);},1,10,100};
f2.plot();
//Also this does not work
for (int n = 0; n < 3; ++n) {
Function f3{[n](double x){return std:sin(n*x);},1,10,10};
f3.plot();
}
}
尤其是带有不包含捕获参数的 lambda 函数的 Function 实例 f1 可以按预期工作。另一方面,捕获 k 的实例 f2 会抛出错误:
错误:没有匹配的函数来调用‘Function::Function()’|
实例 f3 存在同样的问题。有人可以解释并帮助解决这个问题吗?