我正在使用 C++ 开发我的代码,并希望使用 MPFIT 非线性曲线拟合库,该库是用 C 开发的,但允许在 C++ 中编译。
例如我有一个名为“myClass”的类,这个类有一个函数 myClass::Execute()
我在 myClass.h 文件中包含“mpfit.h”。并尝试从 Execute() 调用一个名为 mpfit 的函数。
int status = mpfit(ErrorFunction, num1, num2, xsub_1D, 0, 0, (void *) &variables, &result);
问题是 ErrorFunction 是 myClass 的一个函数。所以当我尝试使用它时编译器会出错。我试图将 ErrorFunction 从类对象中取出,但这次我得到了下面给出的错误:
当 ErrorFunction 在类之外时出错:
错误 4 错误 C2664: 'mpfit' : 无法将参数 1 从 'int (__cdecl *)(int,int,double *,double,double *,void *)' 转换为 'mp_func'
当 ErrorFunction 在类内时出错:
Error 3 error C3867: 'myClass::ErrorFunction': function call missing argument list; use '&myClass::ErrorFunction' to
误差函数定义:
int ErrorFunction(int dummy1, int dummy2, double* xsub, double *diff, double **dvec, void *vars)
如何调用该函数并将其解析为 C 函数 mpfit?
mp_func
定义为:
/* Enforce type of fitting function */
typedef int (*mp_func)(int m, /* Number of functions (elts of fvec) */
int n, /* Number of variables (elts of x) */
double *x, /* I - Parameters */
double *fvec, /* O - function values */
double **dvec, /* O - function derivatives (optional)*/
void *private_data); /* I/O - function private data*/