我想创建许多复合对象,每个对象都包含一个滚动列表和一些按钮(对于我的示例,我已将代码缩减为仅使用一个按钮创建其中一个对象)。除了布局、大小和按钮调用的函数外,所有这些对象都非常相似 (即对于每个对象,同一按钮的回调可以不同)。
因此,在这些复合对象的构造函数中,我想接收绑定到按钮的函数(同样,在我的示例中,它将是一个按钮)。
我有一个可以运行的示例版本(没有传递 Bind 函数),还有一个示例在我尝试将传入函数的代码添加到 Bind 时无法编译。
这是编译器错误:
stack2.cpp: In constructor ‘MainPanel::MainPanel(wxFrame*)’:
stack2.cpp:106:94: error: no matching function for call to ‘MyAddRemoveList::MyAddRemoveList(MainPanel*, const char [12], const char [11], int, int, int, bool, void (MyAddRemoveList::*)(wxCommandEvent&))’
106 | xLB_MULTIPLE | wxLB_HSCROLL | wxLB_NEEDED_SB, false, &MyAddRemoveList::OnAddToList);
1,68 Top
tack2.cpp:61:1: note: candidate: ‘MyAddRemoveList::MyAddRemoveList(wxWindow*, const char*, const char*, int, int, long int, bool, func)’
61 | MyAddRemoveList::MyAddRemoveList(wxWindow *panel, const char *display_name,
| ^~~~~~~~~~~~~~~
stack2.cpp:62:79: note: no known conversion for argument 8 from ‘void (MyAddRemoveList::*)(wxCommandEvent&)’ to ‘func’ {aka ‘void (*)(wxCommandEvent&)’}
62 | const char *table_name, int w, int h, long style, bool do_extract, func fpt) :
| ~~~~~^~~
stack2.cpp:41:7: note: candidate: ‘MyAddRemoveList::MyAddRemoveList(const MyAddRemoveList&)’
41 | class MyAddRemoveList : public wxBoxSizer {
| ^~~~~~~~~~~~~~~
stack2.cpp:41:7: note: candidate expects 1 argument, 8 provided
stack2.cpp:41:7: note: candidate: ‘MyAddRemoveList::MyAddRemoveList(MyAddRemoveList&&)’
stack2.cpp:41:7: note: candidate expects 1 argument, 8 provided
make: *** [stack2.make:94: stack2.o] Error 1
我不明白为什么编译器不能将
void (*)(wxCommandEvent&)
转换为void (MyAddRemoveList::*)(wxCommandEvent&)
。这是我的问题。
备注:
任何帮助/建议将不胜感激。提前致谢...