wxwidgets Bind()项的计算结果不是在event.h中使用1个参数的函数
wxwidgets Bind() term does not evaluate to a function taking 1 argument in event.h
我得到了以下错误,我不知道错误实际上想告诉我什么。
error C2064: term does not evaluate to a function taking 1 arguments event.h line 516
这当然是wxwidgets事件.h文件
导致错误的代码是此方法中的Bind()。
int Layout::CreateWindow()
{
wxPanel * m_pPanel = new wxPanel(this, -1);
wxBoxSizer * m_pVbox = new wxBoxSizer(wxVERTICAL);
wxTextCtrl * m_pReceiveBox = new wxTextCtrl(m_pPanel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxTE_READONLY);
wxTextCtrl * m_pSendBox = new wxTextCtrl(m_pPanel, ID_SEND, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER);
wxStatusBar * m_pStatusBar = new wxStatusBar(m_pPanel, wxID_ANY, wxSTB_DEFAULT_STYLE);
m_pVbox->Add(m_pReceiveBox, 1, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 2);
m_pVbox->Add(m_pSendBox, 0, wxEXPAND | wxLEFT | wxRIGHT, 2);
m_pVbox->Add(m_pStatusBar, 0, wxEXPAND);
m_pPanel->SetSizer(m_pVbox);
Bind(wxEVT_TEXT_ENTER, &Layout::OnSendEnter, ID_SEND);
return 0;
}
enum ID
{
ID_SEND = wxID_HIGHEST+1,
ID_MENU_CONNECT,
ID_MENU_DISCONNECT
};
我有一种感觉,我使用了错误的重载函数,但如果我尝试将Bind()更改为
Bind(wxEVT_TEXT_ENTER, &Layout::OnSendEnter, this, ID_SEND);
我得到一个intellisense错误:没有重载函数的实例"Layout::Bind与参数列表匹配。我相信这对那些更熟悉的人来说可能是显而易见的,所以请解释我对的误解
更新:Layout.h
class Layout : public wxFrame
{
public:
// Constructor
Layout(const wxString & title);
// Event Methods - ** possibly private ***
void OnConnect(wxCommandEvent & event);
void OnDisconnect(wxCommandEvent & event);
void OnQuit(wxCommandEvent & event);
int OnSendEnter(wxCommandEvent & event);
// Helper methods - ** possibly private **
int CreateMenu();
int CreateWindow();
// Class members
wxMenuBar * m_pMenubar;
wxMenu * m_pFileMenu;
wxMenu * m_pHelpMenu;
wxMenu * m_pPortMenu;
};
对于非静态成员函数,问题中提到的Bind
的第二个重载确实是要调用的重载(第一个重载用于自由函数、静态成员函数或函数对象)。
然而,Bind
过载的第二个参数声明如下:
void (Class::*method)(EventArg &)
(Class
和EventArg
是模板参数)。
注意void
——这是您的情况中不匹配的地方,因为您的成员函数被声明为返回int
。
附带说明一下,您可以直接将Bind
发送到您感兴趣的小部件,如下所示:
m_pSendBox->Bind(wxEVT_TEXT_ENTER, &Layout::OnSendEnter, this);
如果事件处理是使用ID_SEND
的唯一原因,则无需定义自定义ID。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- wxwidgets Bind()项的计算结果不是在event.h中使用1个参数的函数