将double(class :: *)(const gsl_vector *,void *)转换为double(*)(const_gsl vector *,void *)

时间:2015-11-02 10:59:16

标签: c++ pointers c++11

我使用gsl minimizer gsl_multimin_fminimizer_nmsimplex2最小化函数min_fun(const gsl_vector *,void *)。为此提供最小化您定义的功能 gsl_multimin_function minex_func;

然后 minex_func.f = min_fun; minex_func.n = 3; (要最小化的变量数和const gsl_vector的元素数) minex_func.par = par; (void *,在其中为函数提供所有参数,这些参数对于一个函数调用是常量)

当我在我的主文件(直接在我的main()中的gsl最小化和作为我的主文件中定义的函数的min_fun)时,它都像这样工作。 现在我想在一个名为Potential的类中的函数中使用此例程,这样我就可以在主文件中对最小化过程进行一行调用。

所以我现在定义Potential :: Minimize(),其中我与之前完全相同的调用最小化。 我还定义了Potential :: min_fun(const gsl_vector *,void *),它与之前的min_fun相同。

根据我对minex_func.f =的版本,我会得到不同的错误:

minex_func.f = Potential :: min_fun; - >这导致错误:无法将'Potential :: min_fun'从类型'double(Potential ::)(const gsl_vector *,void *)'转换为'double()类型(const gsl_vector ,void *)'

minex_func.f =&amp; Potential :: min_fun; - &GT;这里我们得到错误:无法将'double(Potential :: )(const gsl_vector ,void *)'转换为'double()(const gsl_vector ,void *)'< / p>

minex_func.f = min_fun;这里我们得到错误:无法将'Potential :: min_fun'从类型'double(Potential ::)(const gsl_vector *,void *)'转换为'double()类型(const gsl_vector ,void * )

如果我使用 潜在* modfunc =新潜力;

然后

minex_func.f = modfunc-&gt; min_fun;我得到错误:无法将'Potential :: min_fun'从类型'double(Potential ::)(const gsl_vector *,void *)'转换为'double()(const gsl_vector ,void *) “

有人可以解释我如何让它工作,直接在主文件和类定义中的Statement之间有什么区别?

干杯, 栏。

0 个答案:

没有答案