Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取我的对象,通过wxTheApp从wxFrame派生->;GetTopWindow()? 我在C++中的OOP规则中不是很好。 我有这个应用程序OnInit()回调: bool Application::OnInit() { MainFrame *mainFrame = new MainFrame(); mainFrame->Show(); SetTopWindow(mainFrame); return true; }_C++_Wxwidgets - Fatal编程技术网

如何获取我的对象,通过wxTheApp从wxFrame派生->;GetTopWindow()? 我在C++中的OOP规则中不是很好。 我有这个应用程序OnInit()回调: bool Application::OnInit() { MainFrame *mainFrame = new MainFrame(); mainFrame->Show(); SetTopWindow(mainFrame); return true; }

如何获取我的对象,通过wxTheApp从wxFrame派生->;GetTopWindow()? 我在C++中的OOP规则中不是很好。 我有这个应用程序OnInit()回调: bool Application::OnInit() { MainFrame *mainFrame = new MainFrame(); mainFrame->Show(); SetTopWindow(mainFrame); return true; },c++,wxwidgets,C++,Wxwidgets,在大型机中,从wxFrame派生,我有它的私有成员和getter: wxDialog* MainFrame::GetConfigDialog() { return m_ConfigDialog; } 我想在其他类中获取ConfigDialog,所以我调用 wxTheApp->GetTopWindow()->GetConfigDialog() 但是它抱怨wxWindow没有名为GetConfigDialog()的成员。我可以从wxTheApp获得我的主机吗?这里有两件事。首

在大型机中,从wxFrame派生,我有它的私有成员和getter:

wxDialog* MainFrame::GetConfigDialog()
{
    return m_ConfigDialog;
}
我想在其他类中获取ConfigDialog,所以我调用

wxTheApp->GetTopWindow()->GetConfigDialog()

但是它抱怨wxWindow没有名为GetConfigDialog()的成员。我可以从wxTheApp获得我的主机吗?

这里有两件事。首先,您需要使用函数。与
wxTheApp
不同,它返回派生类型的应用程序,即在您的情况下,
application
而不是
wxApp
(它还将其作为引用而不是指针返回,因为它永远不应该为null)。请注意,如文档中所述,您需要使用
wxDECLARE\u APP()
宏在包含应用程序类声明的标头中声明此函数

其次,您仍然不能通过
wxWindow
指针调用派生类
GetConfigDialog()
方法。您可以使用动态强制转换,但这将是丑陋和不安全的。相反,添加一个方法来检索应用程序类的真实主框架(当然,您也需要在其中存储指向它的指针),例如
GetMainFrame()

如果您同时执行这两种操作,您的代码将成为

wxGetApp().GetMainFrame()->GetConfigDisplay()

好的,在Application.h中的类定义之后,我改为wxDECLARE_APP(Application),但现在我在文件中有一个奇怪的错误,声明了另一个类-在“class”之前应该是初始值设定项。如果不使用此宏,所有编译都不会出错。您忘记了分号。就是这样!但是wxGetApp未在此范围内解除锁定。如何使用此函数的全局作用域?::wxGetApp()不工作=///这对我来说没有意义。宏在使用宏本身的作用域中扩展为声明,因此除非您将它放在其他作用域中,否则这就是
wxGetApp()
的位置。