《MFC程序员的WTL教程》第一个例程的一个错误
来源:互联网 发布:php创建二维码 编辑:程序博客网 时间:2024/03/29 15:12
作者:朱金灿
来源:http://blog.csdn.net/clever101
《MFC程序员的WTL教程》第一个例程在于说明ATL的原理,其代码如下:
#include <iostream>template<class T>class B1{public: void SayHi() { T* pT = static_cast<T*>(this);pT->PrintClassName(); }protected: void PrintClassName() { std::wcout<<_T("This is B1")<<std::endl; }private:};class D1:public B1<D1>{// No overridden functions at allpublic:protected:private:};class D2 : public B1<D2>{public:protected: void PrintClassName() { std::wcout<<_T("This is D2")<<std::endl; }private:};int _tmain(int argc, _TCHAR* argv[]){D1 d1;d1.SayHi();D2 d2;d2.SayHi();getchar();return 0;}
实际上这段代码是有问题。在VS 2005(带sp1)环境编译下出现以下编译错误:
d:\wtllearn\lesson1\lesson1\lesson1.cpp(14) : error C2248: 'D2::PrintClassName' :cannot access protected member declared in class 'D2'
1> d:\wtllearn\lesson1\lesson1\lesson1.cpp(38) : see declaration of 'D2::PrintClassName'
1> d:\wtllearn\lesson1\lesson1\lesson1.cpp(34) : see declaration of 'D2'
1> d:\wtllearn\lesson1\lesson1\lesson1.cpp(12) : while compiling class template memberfunction 'void B1<T>::SayHi(void)'
1> with
1> [
1> T=D2
1> ]
1> d:\wtllearn\lesson1\lesson1\lesson1.cpp(35) : see reference to class templateinstantiation 'B1<T>' being compiled
1> with
1> [
1> T=D2
1> ]
问题在于基类B1无法访问派生类D2的保护权限的成员函数。解决办法是将D2:: PrintClassName函数改为public权限。我想ATL中所有需要重载的函数应该都是public的。
- 《MFC程序员的WTL教程》第一个例程的一个错误
- 译:MFC 程序员的 WTL 教程(一)
- MFC程序员的WTL指南之WTL 界面基类
- MFC程序员的WTL指南: 中文版序言
- MFC程序员的WTL开发指南
- MFC程序员的WTL开发指南
- MFC程序员的WTL开发指南
- 发现了《ACE程序员教程》中一个例程的问题
- MFC程序员的WTL指南系列 (WTL for MFC Programmers Series)
- MFC程序员的WTL指南: Part I - ATL 界面类
- MFC程序员的WTL指南: Part IV - 对话框与控件
- MFC程序员的WTL指南: Part VI - 包容ActiveX控件
- MFC程序员的WTL指南: Part VII - 分隔窗口
- MFC程序员的WTL开发指南之ATL界面类
- MFC程序员的WTL指南之工具条与状态条
- MFC程序员的WTL指南之对话框与控件
- [转贴]MFC程序员的WTL指南: 中文版序言
- MFC程序员的WTL指南: Part I - ATL 界面类
- 如何把全角的数字(比如8)转换成半角的数字(比如8)
- android解锁触发广播
- SecureCRT日志配置
- SQA
- VC++编程时,左侧ClassView中的类有时会自动消失,如何让所有类都显示?
- 《MFC程序员的WTL教程》第一个例程的一个错误
- Spring中Quartz的配置
- Qt Model/View/Delegate 机制学习
- 做一个健康的程序员
- ArcGIS API for Silverlight 解决众多密集点分层显示
- 教你快速准确的计算综合布线用线量
- oracle 数据库的备份和导入
- 看门狗溢出实验,依照STC89C51的说明改编
- Windows环境利用VMware7.1.3 搭建iPhone开发环境