[求助]“指向类函数的指针”------------------------------------------------------------------------------
我想做数值积分,从Numerical Recipes哪里考了积分的函数。C/C++ code 工作的不错。
// The composite 2-point Gaussian quadrature Integration
double qgaus(double (*func)(double), double a_arg, double b_arg)
{
int j;
double xr,xm,dx,s;
static double x[]={0.0,0.1488743389,0.4333953941, 0.6794095682,0.8650633666,0.9739065285};
static double w[]={0.0,0.2955242247,0.2692667193, 0.2190863625,0.1494513491,0.0666713443};
xm=0.5*(b_arg+a_arg);
xr=0.5*(b_arg-a_arg);
s=0;
for (j=1;j<=5;j++) {
dx=xr*x[j];
s+= w[j]*((*func)(xm+dx)+(*func)(xm-dx));
}
return s *= xr;
}
这个积分函数有三个参数,第一个是一个“指向函数的指针”,第二,三个是上下界。
我定义一个普通c的函数,一切正常, 比如说
//
double square(double x) {return(x*x);}
double result=qgaus(square, 0, 1);
// 对x*x 积分等于 1/3(x^3), a is 0, b is 1. 结果是0.333333.
但是我定义了一个类函数
class Test
{
public:
double x;
double square(double y) { return y*y+x; } 注意这里我的积分函数变了y*y+x
};
int main()
{
Test hello;
hello.x=1;
double result=qgaus(&Test::square, 0, 1);
出错了 /* error C2664: 'qgaus' : cannot convert parameter 1 from
'double (double)' to 'double (__cdecl *)(double)'
None of the functions with this name in scope match the target type*/
我想是因为普通函数指针和指向类函数指针不同的原因。
我把square改成静态static, 好像工作了,但不是我想要得。
因为在square中我有用了类变量x,是需要初始化的。
我又想可以这样嘛,
double result=qgaus(&hello.square, 0, 1);
还是不行,谁能帮忙看看错。谢了。
------------------------------------------------------------------------------