C++错误:cannot convert parameter x from xxx to yyy
编号:QA000381
建立日期: 1999年1月21日 最后修改日期:1999年1月21日
所属类别:
朱毅华:
操作系统:win 3.2
编程工具:VC1.5
发现近来使用VC的一系列问题与下列情况有关,特咨询专家:
我不用MFC编程时使用的一些API函数编译一切正常,但用MFC后出现编译错误,如:
在非MFC程序中可使用SetClassWord(hwnd,GCW_HICON,hIcon);改变图标,编译一切正常,但我在MFC程序中却无法使用,如在主窗口类MainFrame的某消息处理函数中使用
::SetClassWord(m_hWnd,GCW_HICON,hIcon);
编译错误为:
error C2664: 'SetClassWord' : cannot convert parameter 3 from 'const struct
::HICON__ __near *' to 'unsigned short '
去掉#include,加上#include后此句不出错了(当然所有使用
MFC的语句全出错了)类似的SetClassLong也有这样的问题,不知是不是MFC的头文件修改了某些数据的定义?我想充分利用API的功能,却又受不了亲自编讨厌的消息循环,所以想问的是怎样在使用MFC(AppWizard)的同时不受MFC的影响自由使用全部API呢?
回答:
我想你此前肯定没有看过我的回答:QA000281 "编译后出现大量错误信息怎么办"。其实我在那篇文章讲过类似的问题。具体到你的问题,当你使用MFC时程序采用C++编译方式,但非MFC程序采用C编译方式,相比而言,C++方式对参数的类型检查比C方式严格,有些在C下没问题的语句在C++下会报告不能转换参数。实际上你只需手工进行强制转换就可以,如:
::SetClassWord(m_hWnd,GCW_HICON, (WORD)hIcon);
实际上这种错误只不过是一种警告,它使你确认程序的正确。
所有的编译和链接错误都是小错误,不管它看起来有多恐怕或麻烦。为一个小错误,就失去对MFC的信心,这可不好啊!请相信MFC程序可以自由地调用API函数,当然有时要做一些小的调整。
此问题由李海回答。
| |
|
|
| |
|
|