C++ wxwidgets Bind()项的计算结果不适用于在event.h中使用1个参数的函数
我得到了下面的错误,我不知道这个错误到底想告诉我什么C++ wxwidgets Bind()项的计算结果不适用于在event.h中使用1个参数的函数,c++,wxwidgets,C++,Wxwidgets,我得到了下面的错误,我不知道这个错误到底想告诉我什么 error C2064: term does not evaluate to a function taking 1 arguments event.h line 516 这当然是wxwidgets event.h文件 导致错误的代码是此方法中的Bind() int Layout::CreateWindow() { wxPanel * m_pPanel = new wxPanel(this, -1); wxBoxSizer
error C2064: term does not evaluate to a function taking 1 arguments event.h line 516
这当然是wxwidgets event.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()更改为
我得到一个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 &)
m_pSendBox->Bind(wxEVT_TEXT_ENTER, &Layout::OnSendEnter, this);
(Class
和eventag
是模板参数)
注意,void
——在您的情况下,这是不匹配的,因为您的成员函数被声明为返回一个int
作为旁注,您可以直接将绑定到感兴趣的小部件,如下所示:
void (Class::*method)(EventArg &)
m_pSendBox->Bind(wxEVT_TEXT_ENTER, &Layout::OnSendEnter, this);
如果事件处理是让
ID\u SEND
发送的唯一原因,则无需定义自定义ID,您的感觉是正确的;第二个重载在本例中使用。Layout::OnSendEnter
的声明是什么?它可能与Bind
的参数不匹配。当然是这样,我也有过这样的经历纳闷。当我编辑我原来的帖子时,我质疑它是否应该是无效的。谢谢,有时候人们只需要后退一步,仔细看看。在这方面还是很新的,所以我总是愿意学习。