Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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
C++ wxStaticText::SetLabel()分段错误_C++_Segmentation Fault_Wxwidgets - Fatal编程技术网

C++ wxStaticText::SetLabel()分段错误

C++ wxStaticText::SetLabel()分段错误,c++,segmentation-fault,wxwidgets,C++,Segmentation Fault,Wxwidgets,我是wxWidgets的新手,我想在ubuntu上制作一个简单的GUI应用程序作为参考 我创建了一个简单的窗口,添加了一些按钮,并在按钮事件处理程序中更新wxStaticText对象在屏幕上的文本,以指示按下了哪个按钮 但是,当我调用wxStaticText继承的SetLabel或SetLabelText函数时,就会出现分段错误 也许我遗漏了什么,wxStaticText无法设置标签,我需要另一个控件。但是我在班级名单上找不到类似的东西 我正在使用来自codelite存储库的wxWidgets

我是wxWidgets的新手,我想在ubuntu上制作一个简单的GUI应用程序作为参考

我创建了一个简单的窗口,添加了一些按钮,并在按钮事件处理程序中更新wxStaticText对象在屏幕上的文本,以指示按下了哪个按钮

但是,当我调用wxStaticText继承的SetLabel或SetLabelText函数时,就会出现分段错误

也许我遗漏了什么,wxStaticText无法设置标签,我需要另一个控件。但是我在班级名单上找不到类似的东西

我正在使用来自codelite存储库的wxWidgets 3.1.4

MainFrame.cpp

包括大型机 包括 //具有简单常量的SEGFULTS/BUG需要是静态的 静态常量字符*标题; 常量int大型机::PX=30; 常量int大型机::PY=30; const int MainFrame::SX=400; const int MainFrame::SY=300; 大型机::大型机 :wxFramenullptr,static_castIDs::MainFrame,wxStringTITLE,wxPointPX,PY,wxSizeSX,SY { //创建栏 //不需要调用delete.new为wx元素重载。 菜单栏=新的wxMenuBar; //创建菜单 menuFile=新的wxMenu; //菜单项文件 menuItemClose=new wxMenuItemmenuFile,static_castIDs::menuItemClose,Exit,关闭应用程序; ConnectmenuItemClose->GetId,wxEVT_菜单,wxCommandEventHandlerMainFrame::onClickMenuItemClose; 菜单文件->附录菜单关闭; //从菜单构造菜单栏 菜单栏->附录菜单文件,文件; 此->设置菜单栏; //杂项 lbl_Text=new wxStaticTextthis,wxID_ANY,按下按钮!; //创建尺码器 gridSizer=新的wxGridSizer1,5,wxSize5,5; boxSizer=新wxBoxSizerwxVERTICAL; boxSizer->Addlbl\u文本, 0,//使向量不可拉伸 wxALL,//隐式顶部对齐,四周边框 10//10像素 ; boxSizer->AddgridSizer,1,wxEXPAND,0; 此->设置SizerAndFoxSizer; //创建按钮 v_btn_按钮=标准::使_唯一5; 对于int i=0;i<5;i++ { wxstringtxt=wxStringfmt::formatButton{0},i+1.c_str;
std::cout很难看到,因为这里有太多的代码。您应该尽量减少示例,删除所有不相关的部分,但问题的根本原因是这一行:

        btn->Connect(wxEVT_BUTTON, wxCommandEventHandler(MainFrame::onClickButton));
在这里,您将大型机的一个方法连接到一个wxButton对象,该对象最终在一个错误类的对象上调用一个类方法,并产生预期的致命结果

您需要提供帧指针,即此as Connect eventSink参数,以便在正确的对象上调用它。或者,您可以调用此->Connect,因为此时要连接的对象和用于调用的对象是相同的


最后,为了确保将来不会犯此类错误,请不要使用Connect,而是使用类型安全绑定。如果在此处使用,则此调用不会编译,而不会在运行时崩溃。

//带有简单常量的segfaults/bugs需要是静态的,这表明您可能隐藏了一个bug。可能是相同的bug y您现在正在与之斗争。可能是另一个错误。很难说。@user4581301我认为这是由于在initilizer list/base-ctor调用期间声明了常量,但没有初始化,为base-ctor调用提供了未初始化的变量。将void-MainFrame::onClickMenuItemClosewxCommandEvent&evt更改为void MainFrame::onClickMenuItemClosewxCommandEvent&。如果不给参数一个名称,编译器知道它没有在函数中使用,即使函数仍然需要参数。@user4581301 wx提供了一个函数/宏wxUnusedVar;它在所有示例中都被使用。我现在实现了它。但它与此无关。@FalcoGer,whe崩溃到底发生了什么?你调试代码了吗?
0  0x0000555555950050  ??    
1  0x0000555555566e85  MainFrame::onClickButton  /home/paul/Documents/Projects/wxTest/MainFrame.cpp  77
2  0x00007ffff758f091  wxEvtHandler::ProcessEventIfMatchesId  /home/david/devel/packages/wx/3.1.4/wxwidgets3.1-3.1.4/objs_gtk_sh/../include/wx/app.h  462
3  0x00007ffff758f091  wxEvtHandler::ProcessEventIfMatchesId  /home/david/devel/packages/wx/3.1.4/wxwidgets3.1-3.1.4/objs_gtk_sh/../src/common/event.cpp  1400
4  0x00007ffff758f52e  wxEvtHandler::SearchDynamicEventTable  /home/david/devel/packages/wx/3.1.4/wxwidgets3.1-3.1.4/objs_gtk_sh/../src/common/event.cpp  1897
5  0x00007ffff758f8b4  wxEvtHandler::TryHereOnly  /home/david/devel/packages/wx/3.1.4/wxwidgets3.1-3.1.4/objs_gtk_sh/../src/common/event.cpp  1618
6  0x00007ffff758f95f  wxEvtHandler::TryBeforeAndHere  /home/david/devel/packages/wx/3.1.4/wxwidgets3.1-3.1.4/objs_gtk_sh/../include/wx/event.h  3927
7  0x00007ffff758f95f  wxEvtHandler::ProcessEventLocally  /home/david/devel/packages/wx/3.1.4/wxwidgets3.1-3.1.4/objs_gtk_sh/../src/common/event.cpp  1555
8  0x00007ffff758fa61  wxEvtHandler::ProcessEvent  /home/david/devel/packages/wx/3.1.4/wxwidgets3.1-3.1.4/objs_gtk_sh/../src/common/event.cpp  1528
9  0x00007ffff7590f8b  wxEvtHandler::SafelyProcessEvent  /home/david/devel/packages/wx/3.1.4/wxwidgets3.1-3.1.4/objs_gtk_sh/../src/common/event.cpp  1646
10  0x00007ffff7be5db0  wxWindowBase::HandleWindowEvent  /home/david/devel/packages/wx/3.1.4/wxwidgets3.1-3.1.4/objs_gtk_sh/../include/wx/window.h  852
11  0x00007ffff7a1ba02  wxgtk_button_clicked_callback  /home/david/devel/packages/wx/3.1.4/wxwidgets3.1-3.1.4/objs_gtk_sh/../src/gtk/button.cpp  38
12  0x00007ffff62dba56  ??    
13  0x00007ffff62fab28  g_signal_emit_valist    
14  0x00007ffff62fb0d3  g_signal_emit    
15  0x00007ffff68f92ae  ??    
16  0x00007ffff68f9318  ??    
17  0x00007ffff62db802  g_closure_invoke    
18  0x00007ffff62ef962  ??    
19  0x00007ffff62fab9e  g_signal_emit_valist    
20  0x00007ffff62fb0d3  g_signal_emit    
21  0x00007ffff68f7754  ??    
22  0x00007ffff6ba8a71  ??    
23  0x00007ffff62dba56  ??    
24  0x00007ffff62fab28  g_signal_emit_valist    
25  0x00007ffff62fb0d3  g_signal_emit    
26  0x00007ffff69bff5c  ??    
27  0x00007ffff62dec56  g_cclosure_marshal_VOID__BOXEDv    
28  0x00007ffff62dba56  ??    
29  0x00007ffff62fab28  g_signal_emit_valist    
30  0x00007ffff62fb0d3  g_signal_emit    
31  0x00007ffff69bcfa2  ??    
32  0x00007ffff69be5eb  ??    
33  0x00007ffff69c15d6  ??    
34  0x00007ffff6988bb0  gtk_event_controller_handle_event    
35  0x00007ffff6b4b0fd  ??    
36  0x00007ffff6ba248b  ??    
37  0x00007ffff62db802  g_closure_invoke    
38  0x00007ffff62eef96  ??    
39  0x00007ffff62fa45d  g_signal_emit_valist    
40  0x00007ffff62fb0d3  g_signal_emit    
41  0x00007ffff6b4cbb3  ??    
42  0x00007ffff6a080b8  ??    
43  0x00007ffff6a0a36b  gtk_main_do_event    
44  0x00007ffff66f2f79  ??    
45  0x00007ffff6726106  ??    
46  0x00007ffff61effbd  g_main_context_dispatch    
47  0x00007ffff61f0240  ??    
48  0x00007ffff61f0533  g_main_loop_run    
49  0x00007ffff6a0930d  gtk_main    
50  0x00007ffff79b0e95  wxGUIEventLoop::DoRun  /home/david/devel/packages/wx/3.1.4/wxwidgets3.1-3.1.4/objs_gtk_sh/../src/gtk/evtloop.cpp  64
51  0x00007ffff7445731  wxEventLoopBase::Run  /home/david/devel/packages/wx/3.1.4/wxwidgets3.1-3.1.4/objs_gtk_sh/../src/common/evtloopcmn.cpp  90
52  0x00007ffff740fa2a  wxAppConsoleBase::MainLoop  /home/david/devel/packages/wx/3.1.4/wxwidgets3.1-3.1.4/objs_gtk_sh/../src/common/appbase.cpp  380
53  0x00007ffff749a83a  wxEntry  /home/david/devel/packages/wx/3.1.4/wxwidgets3.1-3.1.4/objs_gtk_sh/../include/wx/app.h  462
54  0x000055555558c082  main  /home/paul/Documents/Projects/wxTest/main.cpp  13
55  0x00007ffff6f910b3  __libc_start_main  /build/glibc-YYA7BZ/glibc-2.31/csu/../csu/libc-start.c  308
56  0x000055555556625e  _start    
        btn->Connect(wxEVT_BUTTON, wxCommandEventHandler(MainFrame::onClickButton));