ネコナゾ娘 (・∀・)
C++点滴
C++博客
联系
聚合
管理
6 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
给我留言
查看公开留言
查看私人留言
随笔档案
2012年5月 (1)
2012年4月 (2)
2012年3月 (3)
搜索
最新评论
阅读排行榜
1. 关于 memcpy 和 strcpy(371)
2. 工作中第一个问题(类的继承)(264)
3. 当 const 遇到 & 的时候(208)
4. 关于23种设计模式的有趣见解(转) (208)
5. 对 Array 的测试(182)
评论排行榜
1. 工作中第一个问题(类的继承)(0)
2. 当 const 遇到 & 的时候(0)
3. 对 Array 的测试(0)
4. 关于 memcpy 和 strcpy(0)
5. 也不知道是什么(0)
工作中第一个问题(类的继承)
由于一年多没有写过代码了,所以最近才开始工作总是感觉有点难,而且很累的感觉。比如上周就遇到了一个小问题,问题是这样的,我负责编写一个简单的界面,使用的是MFC。当时随便阅读了一些公司的代码,然后匆匆忙忙的开公了。等出了Demo之后,被负责人验收的时候各种吐槽,最后修改以后就入库了,算是一周的工作完成了。
可是,当我下周再编译的时候,就不行了,有编译错误(就是编译错误!!!)。我看到编译器给出的提示是 error C2512: 'CDialogEx' : no appropriate default constructor available(翻译过来就是没有默认的构造函数)。出现问题的地方是
Util_IPFilter(BOOL
&
bBlack , CArray
<
CString , CString
>
aList)
{
CUI_IPFilter dlg(bBlack , aList);
return
dlg.ShowModel();
}
我一看CDialogEx 不是 CUI_IPFilter 的父类么 class CUI_IPFilter : public CDialogEx { ... }
然后我去看了下CDialogEx的声明:
class
CDialog :
public
CDialog ,
public
CDataStructBase
{
public
:
CDialog(UINT uIDTemplete , CWnd
*
pParent
=
NULL);
~
CDialog();
private
:
.
.
.
}
不是好好的么,只好去百度了下,这下明白了,原来子类构造的时候,要先构造父类,而父类有自己的构造函数,所以编译器就不会默认给他一个无参数的构造函数了,于是便产生了上面的这样的错误。明白了,就容易了,随便添加了一个资源,加了对话框模板 IDD_IPF,再在 CUI_IPFilter 的构造函数改成
CUI_IPFilter::CUI_IPFilter(BOOL
&
bBlack , CArray
<
CString , CString
>
&
aList): CDialogEx(IDD_IPF)
{
}
于是,一切就都正常了,然后我又浏览了一下,发现了一篇好文章
多重继承和void*的糗事
,它解释了为什么构造子类时必须先构造父类,以及为什么子类可以转换成父类,而父类不能转换成子类,一切都是C++对象的内存模型决定的,可惜我以前看《C++对象模型》的时候那样不耐烦。
posted on 2012-03-21 14:33
neko::nazo
阅读(264)
评论(0)
编辑
收藏
引用
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
Powered by:
C++博客
Copyright © neko::nazo