| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 430 人关注过本帖
标题:[求助]“指向类函数的指针”
取消只看楼主 加入收藏
short
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-8-11
收藏
 问题点数:0 回复次数:0 
[求助]“指向类函数的指针”

------------------------------------------------------------------------------
我想做数值积分,从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);

还是不行,谁能帮忙看看错。谢了。

------------------------------------------------------------------------------

[此贴子已经被作者于2006-8-11 6:45:12编辑过]

搜索更多相关主题的帖子: 指针 函数 
2006-08-11 06:41
快速回复:[求助]“指向类函数的指针”
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034371 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved