C++ 在返回另一个函数的函数中执行程序时出错
我尝试使用“std::function”调用“test”函数中的“testfun”函数,将变量数减少1,并执行中间计算 “A”类(向量)包含一个一维双精度数组C++ 在返回另一个函数的函数中执行程序时出错,c++,lambda,C++,Lambda,我尝试使用“std::function”调用“test”函数中的“testfun”函数,将变量数减少1,并执行中间计算 “A”类(向量)包含一个一维双精度数组 在执行过程中,程序在指定点终止,并在“const auto _Impl=_Getimpl();”上打开“functional”文件线路。如何解决这个问题 #include <functional> class A { public: double* d; unsigned s; A(unsigned
在执行过程中,程序在指定点终止,并在“const auto _Impl=_Getimpl();”上打开“functional”文件线路。如何解决这个问题
#include <functional>
class A
{
public:
double* d;
unsigned s;
A(unsigned size)
{
s = size;
d = new double[s];
}
};
double testfun(A* param, A* x)
{
return param->d[0] + param->d[1] * x->d[0];
}
std::function<double(A*)> anon(std::function<double(A*, A*)> f, A& x, A& y)
{
std::function<double(A*)> result = [&](A * param_)
{
// Program fails somewhere at that point
double sum = 0.0;
for (unsigned i = 0; i < x.s; i++)
sum += f(param_, &x) - y.d[i];
return sum;
};
return result;
}
double test(std::function<double(A*, A*)> f)
{
A x(1); A y(1);
x.d[0] = 0.0;
y.d[0] = 2.0;
A* param = new A(2);
param->d[0] = 2.0; param->d[1] = 6.0;
std::function<double(A*)> func = anon(f, x, y);
return func(param);
}
void main()
{
double t = test(testfun);
}
#包括
甲级
{
公众:
双*d;
未签名的s;
A(无符号大小)
{
s=尺寸;
d=新的双[s];
}
};
双重测试乐趣(A*param,A*x)
{
返回参数->d[0]+参数->d[1]*x->d[0];
}
std::函数anon(std::函数f、A&x、A&y)
{
std::function result=[&](A*参数)
{
//程序在那个点的某个地方失败了
双和=0.0;
for(无符号i=0;id[0]=2.0;参数->d[1]=6.0;
函数func=anon(f,x,y);
返回函数(参数);
}
void main()
{
双t=测试(testfun);
}
不确定这是唯一的问题,但这是一个问题
在下面的函数中
std::function<double(A*)> anon(std::function<double(A*, A*)> f, A& x, A& y)
{
std::function<double(A*)> result = [&](A * param_)
{
// Program fails somewhere at that point
double sum = 0.0;
for (unsigned i = 0; i < x.s; i++)
sum += f(param_, &x) - y.d[i];
return sum;
};
return result;
}
main
的返回类型必须是int
“程序在指定点终止”:指定方式?我添加了注释,其中程序失败将“void”改为“int”似乎不是解决方案=)这是未定义的行为anon
引用f
,但是f
是本地的,您在result
中有悬空引用。是的,这似乎是个问题。如何正确编码?我试图创建“f”的副本,比如std::function f1=f代码>但这会导致相同的结果error@Perotto-根据答案末尾的建议,尝试通过复制将f
传递给lambda:std::function result=[&,f](A*param)
// ....................................V f by copy
std::function<double(A*)> result = [&, f](A * param_)
{ /* lambda content */ }