📄 subject_41316.htm
字号:
<p>
序号:41316 发表者:ophir 发表日期:2003-05-26 10:51:23
<br>主题:函数指针不能指向类的成员????
<br>内容:函数指针不能指向类的成员????<BR><BR>我是初学者,做一个仿windows计算器时,遇到下面问题:<BR><BR>class CComputerDlg : public CDialog<BR>{<BR><BR>protected:<BR> float itsAdd(float x,float y);//用于加法运算<BR> <BR> friend float itsDivide(float x,float y);//用语除法运算<BR> <BR> float itsY;<BR> float itsX;<BR><BR> float (*pFunction)(float, float);//定义了一个函数指针<BR><BR> afx_msg void OnButtonAdd();<BR> afx_msg void OnButtonDivide();<BR><BR> DECLARE_MESSAGE_MAP()<BR>};<BR><BR>void CComputerDlg::OnButtonAdd() //用于响应 + 按钮<BR>{<BR> // TODO: Add your control notification handler code here<BR> itsY=itsX;<BR> itsX=0;<BR> <BR> pFunction=itsAdd;//编译器报错:<BR>//error C2440: '=' : cannot convert from 'float (__thiscall CComputerDlg::*)(float,float)' to 'float (__cdecl *)(float,float)'<BR>//就是这个问题!<BR><BR>}<BR><BR>void CComputerDlg::OnButtonDivide() <BR>{<BR> // TODO: Add your control notification handler code here<BR> itsY=itsX;<BR> itsX=0;<BR> <BR> pFunction=itsDivide;//但对于友元 ok<BR>}<BR><BR>请各位大虾帮忙!<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:天才 回复日期:2003-05-26 14:04:00
<br>内容:定义为static float itsAdd(float x,float y);//用于加法运算<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:ophir 回复日期:2003-05-26 16:14:28
<br>内容:Capcom ,thank you very much!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:天才 回复日期:2003-05-26 17:25:45
<br>内容:You are welcome !
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:zhang2003 回复日期:2003-06-01 15:12:16
<br>内容: float (*pFunction)(float, float);//定义了一个函数指针<BR>我解释一下,请指教:<BR>编译器在编译时不可能聪明到能正确领会你定义该指针是什么意图的程度,就是说你想用它指向一般的函数还是类的成员函数,毕竟它只是个指针,编译器只把它当作一个成员变量来看待,而非成员函数,编译器只能做到当运行到这里时就将参数压入堆栈,然后跳到指针指向的地址(而对类的成员函数却不是这样处理的,它首先将对象的地址入栈再将参数压入堆栈,然后跳到指针指向的地址)<BR>而至于为什么改为static float itsAdd(float x,float y)就不会报错是由于静态成员函数的调用规则与变通函数一致<BR>明白了吗
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -