《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的。


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 军训脸被晒黑了怎么办 晚上吃了油炸的怎么办 楼梯又陡又窄怎么办 小孩不认真做作业怎么办 水厂出水水质不达标怎么办 野猪铁夹子夹到怎么办 燃气灶开孔尺寸大了怎么办 苹果电脑视频显示缺少插件怎么办 安装拼多多显示校验失败怎么办 中央庭黑盒被抢怎么办 lab值a值偏高怎么办 橱房管道堵死了怎么办 微信被别的手机同步登录怎么办 计算机机房空调坏了怎么办 被蝎子蛰了怎么办怎么处理? 月嫂走了孩子闹怎么办 转业军人自建房有困难怎么办 转业军人没配偶想异地安置怎么办 转业军人档案和身份证不符怎么办 转业军人个人资被单位遗失怎么办 空军飞行学员停飞后怎么办 2020年不脱贫的农户怎么办 马自达8停产后配件怎么办 钢铁雄心3没将领怎么办 江苏低于二本线怎么办 电工证快过期了怎么办 天正建筑打不开高版本的图纸怎么办 打开天正只显示cad怎么办 天正软件显示过期了怎么办 四岁宝宝经常吐怎么办 穿越火线登陆不上去怎么办 猫猫呕吐带血怎么办 狗又吐又拉稀怎么办 狗狗肠炎拉血怎么办 拉大便有血怎么办呢 工作中遇到不公待遇怎么办 老兵丢了退伍证怎么办 我的退伍证丢了怎么办 退伍证丢了怎么办啊 银行卡更换之前的卡号怎么办 收到联通欠费催款律师函怎么办