调用父类构造

x363635334 2013-05-09 08:30:23

class Assist
{
protected:
HWND m_hwnd;
void Pre_Print();
public:
Assist(HWND hwnd);
};
Assist::Assist(HWND hwnd)
{
m_hwnd=hwnd;
}

class AssistGm:public Assist
{
public:
AssistGm(HWND hwnd);
};
AssistGm::AssistGm(HWND hwnd)
{
m_hwnd=hwnd;
}

//外部调用如下
AssistGm asgB(hwndB);//error:“Assist”没有合适的默认构造函数可用
asgB.Pre_Print();//error:无法访问 protected 成员

第一个错误 和父类构造有什么关系
第二个错误 随便说说吧
...全文
57 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hugett 2013-05-09
  • 打赏
  • 举报
回复
第一个问题,你没有在子类中显示调用父类构造函数的话,会自动调用父类的默认构造函数。。而你的父类由于定义了一个带参数的构造函数,所以编译器不会自动生成默认构造函数,导致子类调用失败。可以将AssistGm的构造函数改为

AssistGm::AssistGm(HWND hwnd): Assist(hwnd)//显式调用基类构造函数
{
}
第二个问题。。外部怎么可以调用对象的protected成员。。
ForestDB 2013-05-09
  • 打赏
  • 举报
回复
在构造AssistGm对象时,隐式调用的是Assist()而不是Assist(HWND),正是由于显式定义了Assist(HWND),导致系统会自动生成的Assist()没有生成。所以应该显式定义一个Assist的无参构造函数。 第二个错误说明没有正确理解public,protect和private。
x363635334 2013-05-09
  • 打赏
  • 举报
回复
第一个错误 专门给父类定义了一个HWND参的构造呢 第二个错误 子类.保护成员() 访问父类保护成员啊

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧