CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

IMPLEMENT_DYNAMIC的问题

楼主kikiven(kikiven)2003-08-03 23:32:15 在 VC/MFC / 基础类 提问

我在看侯老师写的<<深入浅出MFC>>的仿真IMPLENET_DYNAMIC时,在MFC.h里有定义:  
  #define   _IMPLEMENT_RUNTIMECLASS(class_name,base_class_name,wSchema,pfnNew)\  
  static   char   _lpsz##class_name[]=#class_name;\  
  CRuntimeClass   class_name::class##class_name={\  
  _lpsz##class_name,sizeof(class_name),wSchema,pfnNew,\  
  RUNTIME_CLASS(base_class_name),NULL};\  
  static   AFX_CLASSINIT   _init##class_name(&class_name::class##class_name);\  
  CRuntimeClass   *   class_name::GetRuntimeClass()   const\  
  {return   &class_name::class##class_name;}  
   
  #define   IMPLEMENT_DYNAMIC(class_name,base_class_name)\  
  _IMPLEMENT_RUNTIMECLASS(class_name,base_class_name,0xFFFF,NULL)  
  而在MFC.CPP里调用已定义的宏:  
  IMPLEMENT_DYNAMIC(CCmdTarget,CObject)  
  IMPLEMENT_DYNAMIC(CWinThread,CCmdTarget)  
  IMPLEMENT_DYNAMIC(CWinApp,CWinThread)  
  IMPLEMENT_DYNAMIC(CWnd,CCmdTarget)  
  IMPLEMENT_DYNAMIC(CFrameWnd,CWnd)  
  IMPLEMENT_DYNAMIC(CDocument,CCmdTarget)  
  IMPLEMENT_DYNAMIC(CView,CWnd)  
  出现一连串的ERROR:  
  error   C2065:   'class_name'   :   undeclared   identifier  
  error   C2653:   'class_name'   :   is   not   a   class   or   namespace   name  
  error   C2065:   'classclass_name'   :   undeclared   identifier  
  error   C2275:   'CCmdTarget::CObject'   :   illegal   use   of   this   type   as   an   expression  
  error   C2440:   'initializing'   :   cannot   convert   from   'int'   to   'struct   CRuntimeClass   *'  
  .......(这是第一个宏出现的,接下的大致上差不多了)  
  定义的宏没有错啊,class_name作为宏的参数,为什么成了没有定义的东西呢,  
  更奇怪的是出现了这个东西:CCmdTarget::CObject   ,我真不知编译器是怎么搞出来的......  
   
  百思不得其解,忘告知,谢谢  
   
  问题点数:20、回复次数:3Top

1 楼laodie(张三)回复于 2003-08-04 07:40:07 得分 20

简单看了一下:  
  1,表头有没有处理;  
  2,static   成员有没有初始化;  
  3,CCmdTarget::CObject   我看是你的RUNTIME_CLASS宏定义中的指向可能有问题。Top

2 楼kikiven(kikiven)回复于 2003-08-04 09:17:09 得分 0

1.已经包含了DELARE_DYNAMIC的声明头文件  
  2.CObject的CRuntimeClass成员不是用那对宏来声明和定义的,是单独处理的.(因为书上是这么写的)  
  3.static   成员初始化了.  
   
  我觉得好像都没问题,我把IMPLEMENT_DYNAMIC宏的代码拷到引用处,然后用实参代替形参,最后虽然出错了,但是可以理解的错误码,不是上面那种莫明其妙的东西,我觉得是不是其它地方有问题啊,不是这里??Top

3 楼kikiven(kikiven)回复于 2003-08-04 11:17:03 得分 0

没人帮我的话,还是自己去慢慢研究吧,不过还是谢谢各位了Top

相关问题

  • IMPLEMENT_DYNAMIC起什么作用?
  • template 与 IMPLEMENT_DYNAMIC 或 BEGIN_MESSAGE_MAP 宏的问题
  • dynamic_cast
  • Dynamic Timer Object of VB
  • Oracle Dynamic SQL ???
  • 关于dynamic_cast
  • static_cast and dynamic_cast?
  • Problem of dynamic function
  • 关于dynamic_cast?
  • dynamic_cast异常!!

关键词

  • dynamic
  • implement
  • ccmdtarget
  • cruntimeclass
  • cobject
  • 定义
  • 宏
  • cwnd
  • 问题
  • 成员

得分解答快速导航

  • 帖主:kikiven
  • laodie

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo