术语不评估为具有三个参数的函数

时间:2016-03-10 20:12:25

标签: c++ boost

我尝试使用boost :: numerics :: odeint来集成微分方程组。我的代码是

dMat Equation::solveODE(dMat u_i, double t_i)
{

dVec u_iVec(2 * u_i.size());
u_iVec = MtoV(u_i);

void(Equation::*pointer)(const dVec &, dVec &, const double ) = &Equation::ODEf;

runge_kutta4< dVec > stepper;
integrate_const(stepper, pointer, u_iVec, 0.0, 1.0, 0.01);

return u_i;
}

void Equation::ODEf(const dVec &u_i, dVec &dxdt, const double /* t */)
{
    for (size_t I = 0; I < u_i.size(); I++)
{
    if (I % 2 == 0)
    {
        dxdt[I] = f1(VtoM(u_i, u_i.size() / 2, 2))[I];
    }
    else
    {
        dxdt[I] = f2(VtoM(u_i, u_i.size() / 2, 2))[I];
    }

}
}

MtoV仅将矩阵更改为向量,f1和f2评估等式的rhs。我曾经认为问题是ODEf是一个成员函数od Equation(我得到的错误是我有非标准语法)但是现在我得到的错误是该术语没有评估为一个带3个参数的函数...可能是因为ODEf再次成为Equation的成员函数吗?

解答: 我不得不使用: std :: function ODEf_without_classname(std :: bind(&amp; Equation :: ODEf,this,std :: placeholders :: _ 1,std :: placeholders :: _ 2,std :: placeholders :: _ 3));

为了摆脱Odef开头的Equation ::

1 个答案:

答案 0 :(得分:1)

pointer不是一个带3个参数的函数,它是一个成员函数指针;略有不同,从概念上讲也是第0个参数,this指针。尝试使用自由函数/函数对象/绑定表达式或lambda。