私はC++を使用してコードを開発しており、Cで開発されているがC++でコンパイルできるMPFIT非線形カーブフィッティングライブラリを使用したいと考えています。
たとえば、「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*/