| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 824 人关注过本帖
标题:MFC的类型强制转换问题?
只看楼主 加入收藏
xufen340
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1351
注 册:2009-8-7
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
MFC的类型强制转换问题?
MFX深入浅出有这么一段:
struct AFX_MSGMAP_ENTRY;
struct AFX_MSGMAP{
AFX_MSGMAP* pBaseMessageMap;
AFX_MSGMAP_ENTRY* lpEntries;
};

#define DECLARE_MESSAGE_MAP()
    static AFX_MSGMAP_ENTRY _messageEntries[];
static AFX_MSGMAP messageMap;
virtual AFX_MSGMAP* GetMessageMap() const;

#define BEGIN_MESSAGE_MAP(theClass,baseClass)
AFX_MSGMAP* theClass::GetMessageMap() const{
return &theClass::messageMap
}

AFX_MSGMAP theClass::messageMap={
&(baseClass::messageMap),
(AFX_MSGMAP_ENTRY*) &(TheClass::_messageEntries)}
提问:
(AFX_MSGMAP_ENTRY*) &(TheClass::_messageEntries)这里干嘛弄个(AFX_MSGMAP_ENTRY*) &转换,为何不直接用TheClass::_messageEntries,如:
          AFX_MSGMAP theClass::messageMap={
&(baseClass::messageMap),
TheClass::_messageEntries} .

 
比如:
int *p;
int a[]={1};
p=a就可以了,照上面说的,
AFX_MSGMAP_ENTRY* lpEntries
AFX_MSGMAP_ENTRY _messageEntries[];
lpEntries=(AFX_MSGMAP_ENTRY*) &(TheClass::_messageEntries).
难道要p=(int*)&a,为何这样定义。
搜索更多相关主题的帖子: MFC 类型 
2009-08-07 11:13
shzhj
Rank: 2
等 级:论坛游民
帖 子:9
专家分:17
注 册:2009-8-18
收藏
得分:14 
&(TheClass::_messageEntries)得到的是一个地址,但不是指向AFX_MSGMAP_ENTRY类型,所以要强制转换
2009-08-18 11:34
xufen340
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1351
注 册:2009-8-7
收藏
得分:0 
static AFX_MSGMAP_ENTRY _messageEntries[];这里声明很明显是TheClass::_messageEntries指向AFX_MSGMAP_ENTRY类型,那你说TheClass::_messageEntries是何类型。
2009-08-19 07:05
xufen340
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1351
注 册:2009-8-7
收藏
得分:0 

针对上面的情况我写了个相同简化的例子,如果是类型不对,怎么会下面语句可以运行。
#include<iostream>
using namespace std;
struct st
{
    int *p;
};
int main() {
    int a[]={1,2};
    st st1={a};
    cout<<st1.p[0]<<st1.p[1]<<endl;
    st st2={(int*)&a};
    cout<<st2.p[0]<<st2.p[1]<<endl;
    return 0
}
2009-08-19 11:28
快速回复:MFC的类型强制转换问题?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013511 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved