调用父类构造
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 成员
第一个错误 和父类构造有什么关系
第二个错误 随便说说吧
[解决办法]
在构造AssistGm对象时,隐式调用的是Assist()而不是Assist(HWND),正是由于显式定义了Assist(HWND),导致系统会自动生成的Assist()没有生成。所以应该显式定义一个Assist的无参构造函数。
第二个错误说明没有正确理解public,protect和private。
[解决办法]
第一个问题,你没有在子类中显示调用父类构造函数的话,会自动调用父类的默认构造函数。。而你的父类由于定义了一个带参数的构造函数,所以编译器不会自动生成默认构造函数,导致子类调用失败。可以将AssistGm的构造函数改为
AssistGm::AssistGm(HWND hwnd): Assist(hwnd)//显式调用基类构造函数
{
}
第二个问题。。外部怎么可以调用对象的protected成员。。