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

[求助]“指向类函数的指针”------------------------------------------------------------------------------
我想做数值积分,从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-08-11 06:49
横眉冷对
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2005-3-3
收藏
得分:0 

发到C++板块问问。
顺便问下楼主的Numerical Recipes从哪里下的。
我这只有个在线阅读的版本,还是英文的,看不太懂
谢谢!


MSN:jyycom@ 爱好:军事,体育,Rock。
2006-08-11 09:36
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

C++ 的題目啊,怎麽到 C 區了
--------------------------

在聲明 gqaus 的參數時使用類修飾符啊
double qgaus(double (Test::*func)(double), double a_arg, double b_arg)
.......
好像是要靜態的成員的, 忘記了.....


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-08-11 09:37
short
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-8-11
收藏
得分:0 
我在图书馆借了一本书,是英文的。
2006-08-11 09:54
横眉冷对
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2005-3-3
收藏
得分:0 
http://www.library.cornell.edu/nr/bookcpdf.html
贴个地址,大家共享一下
经典书

MSN:jyycom@ 爱好:军事,体育,Rock。
2006-08-11 10:44
快速回复:[求助][求助]“指向类函数的指针”
数据加载中...
 
   



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

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