GSL ODE解决方案中的指针类型编译时错误

时间:2013-03-21 16:26:53

标签: c++ pointers gsl ode

我正在使用GSL示例页面上的代码来尝试解决四个微分方程组的系统。我一直在努力将五个参数传递给ODE系统,并且已经到达最后一个(我希望!)编译时错误。随后是一个片段,给出了错误

114:57: error: invalid conversion from ‘int (*)(double, const double*, 
double*, double**, void*)’ to ‘int (*)(double, const double*, double*, 
double*, void*)’ [-fpermissive]

对应于以gsl_odeiv2_system开头的行:

int main()
{
  double t = 0.0;
  double y[4] = { 0.0, 0.0, 1.0, 1.0 };
  int i, s;

  struct pendula_params * info;
  info->m2 = 1.0;
  info->m1 = 1.0;
  info->l1 = 1.0;
  info->l2 = 1.0;
  info->g  = 1.0;

  gsl_odeiv2_system sys = { pendula, jacobian, 4, &info };

  gsl_odeiv2_driver *d =
    gsl_odeiv2_driver_alloc_y_new (&sys, gsl_odeiv2_step_msadams,
                                   1e-3, 1e-8, 1e-8);

有关可能发生的事情的任何想法?

非常感谢,

Mark C。

1 个答案:

答案 0 :(得分:1)

您可以通过比较错误消息中显示的两种函数类型来查看错误。

gsl_odeiv2_system结构要求jacobian成员是指向以double*作为第四个参数的函数的指针。但是,您的jacobian函数会将double**作为第四个参数,这会使其不兼容。