wxWidgets中childFrame调用Show()无法访问的问题排查
解决wxMDIChildFrame调用Show()的访问错误
你的代码报错核心原因是childFrame类默认采用了私有继承wxMDIChildFrame,导致父类的public成员函数Show()在子类中被转为私有,外部无法直接调用。
在C++中,用class定义类时,默认继承方式是私有继承,而wxWidgets窗口类的核心成员函数(比如Show())都是public权限,必须通过公有继承才能让外部正常访问这些方法。
修正步骤
修改childFrame.h中的继承声明,显式添加public关键字:
#pragma once #include <wx/wx.h> class childFrame: public wxMDIChildFrame // 补充public关键字 { public: childFrame(wxMDIParentFrame* parent, wxString childTitle); };
修改后,childFrame以公有继承方式继承wxMDIChildFrame,父类的public成员函数Show()就可以在外部正常调用了。
错误信息对应解析
编译器报错明确指出:
'wxMDIChildFrame::Show'无法访问,因为'childFrame'使用私有继承方式继承自'wxMDIChildFrame'
私有继承会将父类所有成员(包括public)转为子类私有成员,因此在MyFrame::OnNewMenu中调用cFrame->Show()时,编译器判定为访问私有成员,触发错误。
内容的提问来源于stack exchange,提问作者Ammishaddai Boakye
相关产品推荐
相关产品推荐

