我是抄的一本书上的代码,做一个简单的计算器
头文件中已加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)
不写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);
}
从错误来看是你的函数类型不对。代码试图把 OnNumberKey 这个函数转型成 'void (__thiscall CCmdTarget::*)(unsigned int) ‘不被接受。感觉你的OnNumberKey是不是写成全局函数了。或许你应该把它定义在某个从 CCmdTarget 继承下来的类里面,作为它的成员函数。