今天发现的一个VC6.0在私有变量声明时的BUG
来源:互联网 发布:php 阿里大于短信接口 编辑:程序博客网 时间:2024/06/14 01:12
如果有人说,VC的宏能够影响到类成员变量的属性,你信吗?反正是我信了!
今天在修改一个程序的时候,我在类A的外部使用指向类B的指针,居然能够访问到类B的受保护成员变量!!!!!这让我感到非常奇怪,于是来到变量的声明处,以前由于自己懒,直接在自动生成的代码后边进行声明。
代码如下:
protected: // create from serialization onlyCMSampleView();DECLARE_DYNCREATE(CMSampleView)CMapX m_ctrlMapX;
我就想是不是DECLARE_DYNCREATE这个宏影响到了m_ctrlMap的属性呢?
于是我在m_ctrlMap前面加上访问修饰符protected。于是就可以受保护成员变量就能“被保护了”。
error C2248: 'm_ctrlMapX' : cannot access protected member declared in class 'CMSampleView'
———————————— 华丽的分割线 ———————————
最近被人提到这个问题,他说这里不能算是一个bug,也就是说DECLARE_DYNCREATE做了某些不好的事情。那么看下这个宏到底干了啥:
#define DECLARE_DYNCREATE(class_name) \DECLARE_DYNAMIC(class_name) \static CObject* PASCAL CreateObject();#define DECLARE_DYNAMIC(class_name) \protected: \static CRuntimeClass* PASCAL _GetBaseClass(); \public: \static const CRuntimeClass class##class_name; \static CRuntimeClass* PASCAL GetThisClass(); \virtual CRuntimeClass* GetRuntimeClass() const; \现在谜底揭晓了:
DECLARE_DYNCREATE包含了DECLARE_DYNAMIC,而DECLARE_DYNAMIC里面在末尾使用了public修饰符,然后,使用的
m_ctrlMapX变量就被这个public影响到了。btw,C里面的宏确实在使用的时候得小心一点,在C++里面尽量少用宏定义,如常量定义,不要写成
#define MAX_LENGTH1024
写成:
const int MAX_LENGTH = 1024;
如果只在本文件中使用,最好写成:
static const int MAX_LENGTH = 1024;
简洁明了的变量定义,在很多时候能够帮助到我们,减少代码里面出现某些诡异bug。
- 今天发现的一个VC6.0在私有变量声明时的BUG
- 今天发现一个 vc 的大 bug
- 今天发现UltraEdit32的一个bug
- 今天发现校友录的一个Bug
- 今天发现Photoshop的一个bug
- VC6的一个bug???
- 今天发现一个BUG
- 今天发现了vmware6.o ace的一个bug
- 今天无意中又发现一个记事本的 bug
- 今天发现的kali rolling中的一个翻译bug
- VC6.0中友元函数无法访问类私有成员的解决办法-------VC6.0的bug
- VC6.0中友元函数无法访问类私有成员的解决办法-------VC6.0的bug
- VC6.0中友元函数无法访问类私有成员的解决办法(VC6.0的bug)
- VC6.0中友元函数无法访问类私有成员的解决办法-------VC6.0的bug
- 今天发现一个Java的关于java.io.File在处理com1到com9为文件名的Bug.
- 今天发现了JBuilder 2006 一个BUG,关于资源文件重构后的BUG
- 今天调试时,无意发现ie的bug page
- 发现DeviceEmulatorBSP5.0的一个BUG
- VS2010 快捷键大全
- SQL Server 2005远程连接不上的解决方法
- gcc 笔记 基本选项
- [Visual C++系列] 2.2 在窗口中输出文字
- 去掉ie横向滚动条
- 今天发现的一个VC6.0在私有变量声明时的BUG
- Android Marcket将支持多个APK.
- STM32中断与事件
- 【IT书籍分享群】新浪微薄群
- 独家新闻:雅虎云主管离职,现担任Battery Ventures的(EIR)入驻企业家
- jQuery 程序员速成二 之 选择器
- ZOJ 1298 Domino Effect【dijkstra】
- 更改消息路由Command
- C++的未来,以及未来的未来