请问关于函数指针问题,高手赐教,内详
出现这样的编译错误,问题在什么地方呢?应该如何更正?请各位高手赐教
c:\Documents and Settings\xxx\My Documents\Visual Studio Projects\FrFT\FrFTDoc.cpp(144) : error C2664: “CFrFTDoc::qtrap” : 不能将参数 1 从“float (float,float)”转换为“float (__cdecl *)(float,float)”
在匹配目标类型的范围内没有具有该名称的函数
源程序如下
float CFrFTDoc::trapzd(float a, float b, int n, float (*func)(float, float), float u)
{
float x, tnm, sum, del;
static float s;
int it,j;
if (n==1)
{
return ( s = 0.5*(b-a)*(func(a,u)+func(b,u)));
}
else
{
for (it=1, j=1; j<n-1;j++)
it<<=1;
tnm = it;
del = float((b-a)/tnm);
x = float(a+0.5*del);
for (sum=0.0,j=1;j<=it;j++,x+=del)
sum += func(x,u);
s = float(0.5*(s+(b-a)*sum/tnm));
return s;
}
//return 0;
}
float CFrFTDoc::real(float x, float u)
{
return float( cos((u*u+x*x)/(2*tan(a)) - (u*x)/(sin(a))));
}
float CFrFTDoc::img(float x, float u)
{
return float( sin((u*u+x*x)/(2*tan(a)) - (u*x)/(sin(a))));
}
float CFrFTDoc::qtrap (float (*func)(float,float),float a, float b, float u)
{
int j;
float s, olds;
olds = -1.0e30;
for (j=1;j<=JMAX;j++)
{
s = trapzd(a,b,j,func,u);
if (fabs(s-olds)<EPS*fabs(olds))
return s;
if (s==0.0 && olds == 0.0 && j>6)
return s;
olds = s;
}
return 0;
}
void CFrFTDoc::calc()
{
int i;
float temp;
for (i=0;i<=2000;i++)
{
result_real[i] = qtrap((real),-1,1,v[i]);
result_img[i] = qtrap((img),-1,1,v[i]);
temp = float(1/(sqrt(2*3.1415926*sin(a))));
result[i] = float(temp*sqrt(result_real[i]*result_real[i] + result_img[i]*result_img[i]));
}
return;
}
问题点数:0、回复次数:5Top
1 楼rferen2003(流水)回复于 2004-11-15 23:50:15 得分 0
在匹配目标类型的范围内没有具有该名称的函数
应该是没有找到real函数或者img函数吧
-> result_real[i] = qtrap((real),-1,1,v[i]);
result_img[i] = qtrap((img),-1,1,v[i]);Top
2 楼zhangfjj(小张)回复于 2004-11-16 00:10:59 得分 0
单纯从这里来看,应该是没有问题的。
Top
3 楼chinadragonss(独孤俊)回复于 2004-11-16 09:19:31 得分 0
调用参数的问题。Top
4 楼oo(为了名副其实,努力学习oo技术ing)回复于 2004-11-16 09:47:39 得分 0
你定义的是:float (*func)(float, float) 这个是普通函数
但传进去的是 real,这个是成员函数,两个不一样的,成员函数有个隐含的参数this
所以两个是不匹配的;
把float (*func)(float, float) 改成:
float (CFrFTDoc::*func)(float,float);
调用的时候:
return ( s = 0.5*(b-a)*(func(a,u)+func(b,u)));
改成
return ( s = 0.5*(b-a)*((this->*func)(a,u)+(this->*func)(b,u)));Top
5 楼houdy(致力于图像/图形领域,成为有思想的程序员)回复于 2004-11-16 10:36:14 得分 0
oo(为了名副其实,努力学习oo技术ing)应该是对的,学习了。。。Top




