急用:关于指向成员函数的指针 还有,我知道类的成员函数是以_stdcall标准调用,而外部函数是以_cdecl标准调用,但我不知道该怎么改,只知道错误原因。请问要是我上述的功能该怎么改。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我们知道,C++的类声明中,private是其缺省声明,如果一个类的成员函数是私有的话,外部函数不能访问岂非是再正常也不过的事了。呵呵。 同病之怜!为了实现这个我迫不得已将类成员声明成static,虽然可行,但让我极度不爽!!!那位高人能指点一二?感激不尽! 同意wolveshunter的说法,成员函数在声明后并没有实体。所以不能用参数方式传递,将要作为参数的函数声明成静态函数可以解决这个问题。 去看看我的问题,可能对你也有用问题: 如何定义指向成员函数的指针? 网页http://www.csdn.net/expert/topic/449/449184.shtm 去看看ON_UPDATE_COMMAND_UI的定义 谢谢各位了,我的成员变量是声明为公有的,还有,我也知道声明为static,但正如WolvesHunter(Lee)所说的,那样太不爽了 原因如下:》double A::f2(double y)》{》 g(f1,0,y);//此处调用成员函数f1,作为函数指针传递给g》 return 1;》}上面你想将f1作为函数指针传递给外部函数g,可惜不能成功,因为f1的传递是值传递(指针值传递),因为在f2中所以展开后实际传递为,g(this->f1,0,y),注意此处传递的并不是函数指针(也可以说是函数指针,只不过其是内部指针,不仅对外部有保护属性,而且是相对值,相对论你懂吧,哈哈!),而是f1相对于this指针的f1的偏移值,因为不能成功调用,而在g中只得到f1指针的偏移值,而对于A::this指针是不可见的,可见你对于类的实现技术并不清楚,建你找一本有关C/C++的基础书籍看一看,(建议而已,没有恶意,最好读一读MSDN或外著书籍)。你可以修改g()如下:double g(double (A::*f)(double),double a,double b){ //......} 既然外部声明是要声明为doulbe g(double (A::*f),double a,double b),显然函数g只能引用A的成员函数,那我干脆把g也当成A的成员函数算了。我把 g声明为A的成员寒暑,但是在访问时出现错误,,即不能通过f(a)或f(b)这样的形式访问传递过来的函数,出现如下错误term does not evalute to a function,意思是f不是一个函数,请再次帮助! 应该是与类成员函数有关吧,因为类成员函数有一个缺省的参数this,所以在类A中f1的参数个数不是一个而是两个,而在函数g中的函数指针却只有一个参数,这两个函数的参数定义不匹配,所以会出现错误,而类的static成员函数没有缺省的参数this,所以不会出现错误。 『兔子党散分』加薪结果出来了,散分 CImage draw 用TextOut输出文本时,怎样控制显示区域,实现自动换行! 100求教~~如何将指定位置的bmp图片像素值保存到一个数组中? 求助:用VC6.0写的程序在运行两个半小时后出现"必需的资源无法得到"提示筐,有哪些原因? dll库调试碰到莫名其妙的问题, 救急呀!!!!!!!!!! 如何判断程序点击最小化? 怎样让IE不保存临时文件? 关于opengl的颜色渲染的问题 我是个新手,以前学Delphi的,现在想学VC,但不知道该如何下手? winsock库在程序结束后不显式将其释放,会有什么后果?谢谢!
问题: 如何定义指向成员函数的指针?
网页http://www.csdn.net/expert/topic/449/449184.shtm
ON_UPDATE_COMMAND_UI的定义
还有,我也知道声明为static,但正如WolvesHunter(Lee)所说的,那样太不爽了
》double A::f2(double y)
》{
》 g(f1,0,y);//此处调用成员函数f1,作为函数指针传递给g
》 return 1;
》}
上面你想将f1作为函数指针传递给外部函数g,可惜不能成功,因为f1的传递是值传递(指针值传递),因为在f2中所以展开后实际传递为,g(this->f1,0,y),注意此处传递的并不是函数指针(也可以说是函数指针,只不过其是内部指针,不仅对外部有保护属性,而且是相对值,相对论你懂吧,哈哈!),而是f1相对于this指针的f1的偏移值,因为不能成功调用,而在g中只得到f1指针的偏移值,而对于A::this指针是不可见的,可见你对于类的实现技术并不清楚,建你找一本有关C/C++的基础书籍看一看,(建议而已,没有恶意,最好读一读MSDN或外著书籍)。
你可以修改g()如下:
double g(double (A::*f)(double),double a,double b)
{
//......
}
显然函数g只能引用A的成员函数,那我干脆把g也当成A的成员函数算了。
我把 g声明为A的成员寒暑,但是在访问时出现错误,,
即不能通过f(a)或f(b)这样的形式访问传递过来的函数,
出现如下错误term does not evalute to a function,意思是f不是一个函数,
请再次帮助!