热情软件屋

 

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函数,当然有时要做一些小的调整。

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio