首页 新闻 赞助 找找看

MFC求救error C2440: 'type cast' : cannot convert from 'void (__cdecl *)(unsigned int)' to 'void (__t

0
悬赏园豆:10 [待解决问题]

我是抄的一本书上的代码,做一个简单的计算器

头文件中已加afx_msg void OnNumberKey(UINT nID);
    afx_msg void OnOperationKey(UINT nID);

 

cpp中

ON_COMMAND_RANGE(IDC_BUTTON1,IDC_BUTTON10,OnNumberKey)
ON_COMMAND_RANGE(IDC_BUTTON11,IDC_BUTTON20,OnOperationKey)

编译时:

-----------------Configuration: Calculator - Win32 Debug--------------------
Compiling...
CalculatorDlg.cpp
E:\编程学习\Calculator\CalculatorDlg.cpp(58) : error C2440: 'type cast' : cannot convert from 'void (__cdecl *)(unsigned int)' to 'void (__thiscall CCmdTarget::*)(unsigned int)'
        There is no context in which this conversion is possible
E:\编程学习\Calculator\CalculatorDlg.cpp(59) : error C2440: 'type cast' : cannot convert from 'void (__cdecl *)(unsigned int)' to 'void (__thiscall CCmdTarget::*)(unsigned int)'
        There is no context in which this conversion is possible
E:\编程学习\Calculator\CalculatorDlg.cpp(508) : error C2601: 'OnOperationKey' : local function definitions are illegal
Error executing cl.exe.

Calculator.exe - 3 error(s), 0 warning(s)

C++
不可思议的淡定的主页 不可思议的淡定 | 初学一级 | 园豆:190
提问于:2012-03-12 20:26
< >
分享
所有回答(2)
2

不写MFC已经有几年了。。。。。

OnNumberKey是怎么定义的,是类的成员函数吗?从出错信息上看怎么不像是成元函数呢?

看MSDN的例子:

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) 
ON_COMMAND_RANGE(ID_FILE_MENUITEM1, ID_FILE_MENUITEM3, OnFileMenuItems)
END_MESSAGE_MAP()
void CMainFrame::OnFileMenuItems(UINT nID){
CMenu* mmenu = GetMenu();
CMenu* submenu = mmenu->GetSubMenu(0);
submenu->CheckMenuRadioItem(ID_FILE_MENUITEM1, ID_FILE_MENUITEM3, nID, MF_BYCOMMAND);
}



zsounder | 园豆:2819 (老鸟四级) | 2012-03-12 22:42
0

从错误来看是你的函数类型不对。代码试图把 OnNumberKey 这个函数转型成 'void (__thiscall CCmdTarget::*)(unsigned int) ‘不被接受。感觉你的OnNumberKey是不是写成全局函数了。或许你应该把它定义在某个从 CCmdTarget 继承下来的类里面,作为它的成员函数。

hoodlum1980 | 园豆:559 (小虾三级) | 2012-06-07 16:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册