无法直接从我的代码调用事件处理程序。我在2年前在这里发现了同样的问题。 original question
但行
me_InsertCommentText(wxCommandEvent());
没有编译(mingw32-gcc 4.8,win7,codeblocks,wxFormBuilder)
错误:没有匹配函数来调用'mjpgen_wdDialog :: me_InsertCommentText(wxCommandEvent)' 注意:候选人是: 注意:void mjpgen_wdDialog :: me_InsertCommentText(wxCommandEvent&)
对我来说,似乎是由引用参数调用引起的。 我怎样才能让它发挥作用?
答案 0 :(得分:2)
关于使用命名临时变量的答案在技术上是正确的,但重要的是你真的不应该首先这样做。处理程序只能从wxWidgets中调用,而不是直接调用某些OnFoo(wxFooEvent&)
,而是应该重构代码,只需从DoFoo()
调用一些新的OnFoo()
,然后调用DoFoo()
如果需要,可以从代码的其余部分开始。
使用C ++ 11时,这变得更加简单,因为在这种情况下你甚至根本不需要OnFoo()
而只能写
whatever->Bind(wxEVT_FOO, [=](wxCommandEvent&) { DoFoo(); });
避免额外的功能。
答案 1 :(得分:1)
wxCommandEvent()
是一个临时对象,不能绑定到非const引用。你可以在这里使用命名变量:
wxCommandEvent event;
me_InsertCommentText(event);
或将参数类型更改为const reference:
void mjpgen_wdDialog::me_InsertCommentText(const wxCommandEvent&)
然后
me_InsertCommentText(wxCommandEvent());