打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
转:构造函数问题

转:构造函数问题

(2011-10-17 17:48:10)
标签:

it

分类: 学习
转:构造函数(来自百度思绪飘扬)

(一)今天在学习《vc++深入详解》第八章的属性表单的例子的时候,由于疏忽在视类中将CPropSheet类的对象定义为了无参数的了,错误代码如下:

void CDialog6View::OnPropertysheet() 
{
// TODO: Add your command handler code here
CPropSheet propSheet;
propSheet.DoModal();
}

结果在编译的时候总是提示"no appropriate default constructor available”错误,意思是说“没有可用的合适的构造函数”,开始不懂,上网一查突然明白怎么回事了。原来问题出在构造函数上。

(二)正确代码应为:

void CDialog6View::OnPropertysheet() 
{
// TODO: Add your command handler code here
CPropSheet propSheet("属性表单");//属性表单的标题为“属性表单”
propSheet.DoModal();
}

       (三)原因:因为例子中自定义的CPropSheet函数的两个构造函数的声明如下:

CPropSheet::CPropSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(nIDCaption, pParentWnd, iSelectPage)
{
}

CPropSheet::CPropSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(pszCaption, pParentWnd, iSelectPage)
{
   

以及CPropSheet函数对应的基类:CPropertySheet的两个构造函数的声明如下:

CPropertySheet(UINT nIDCaption, CWnd* pParentWnd=NULL, UINT iSelectPage=0);

CPropertySheet(LPCTSTR pszCaption, CWnd* pParentWnd=NULL, UINT iSelectPage=0);

可以看出,这四个构造函数都带参数,所以当将CPropSheet类的对象定义为无参数的时,就会出现"no appropriate default constructor available”错误了。

       (四)下面补充一下构造函数的知识:如果一个类中没有定义任何的构造函数,那么C++编译器在某些情况下会为该类提供一个默认的构造函数,这个默认的构造函数是一个不带参数的构造函数。只要一个类中定义了一个构造函数,不管这个构造函数是否是带参数的构造函数,c++编译器就不再提供默认的构造函数。也就是说:如果一个类定义了一个带参数的构造函数,还想要无参数的构造函数,则必须自己定义。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
MFC程序框架剖析
如何在没有文档的情况下使用CView及其派生类!
CDialogBar使用手记--一片叶子的世界
MFC属性页使用说明
VS2010/MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)
在MFC中有多个slider时OnHScroll函数判断方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服