2
我正在使用wxWidgets 2.9,並且遇到了綁定()函數的問題。該documentation爲wxEvtHandler說wxWidgets綁定示例
void Bind (const EventTag &eventType, Functor functor, int id=wxID_ANY, int lastId=wxID_ANY, wxObject *userData=NULL)
對我來說,這意味着我進入這樣的事情
Bind(wxEVT_PAINT, &Board::onPaint);
或本
Bind(wxEVT_TIMER, &TetrisController::onTimer, ID_TIMER);
但既不在我的程序,這些工作的。 的wxWidgets還具有事件的explanation具有不同的格式:
Bind(wxEVT_COMMAND_MENU_SELECTED, &MyFrame::OnExit, this, wxID_EXIT);
Bind(wxEVT_COMMAND_MENU_SELECTED, &MyFrameHandler::OnFrameExit, &myFrameHandler, wxID_EXIT);
看來綁定()函數需要一個指針,它指向具有列出ID之前仿函數的對象。 我試過
Bind(wxEVT_PAINT, &Board::onPaint, this); // this points to the Board
Bind(wxEVT_TIMER, &TetrisController::onTimer, controllerPtr, ID_TIMER);
這些都不能工作。 我可以得到一個如何正確使用Bind()函數的例子嗎?這個功能有什麼問題?
編輯: 張貼更多的代碼,希望得到答案。下面是我得到的錯誤信息:
版本#1
error: must use '.*' or '->*' to call pointer-to-member function in '((wxEventFunctorFunctor<wxEventTypeTag<wxPaintEvent>, void (tetris::Board::*)(wxPaintEvent&)>*)this)->wxEventFunctorFunctor<wxEventTypeTag<wxPaintEvent>, void (tetris::Board::*)(wxPaintEvent&)>::m_handler (...)', e.g. '(... ->* ((wxEventFunctorFunctor<wxEventTypeTag<wxPaintEvent>, void (tetris::Board::*)(wxPaintEvent&)>*)this)->wxEventFunctorFunctor<wxEventTypeTag<wxPaintEvent>, void (tetris::Board::*)(wxPaintEvent&)>::m_handler) (...)'|
版本#2
error: no matching function for call to 'wxEventFunctorMethod<wxEventTypeTag<wxTimerEvent>, TetrisController, wxCommandEvent, TetrisController>::CheckHandlerArgument(wxTimerEvent*)'
error: cannot convert 'Board*' to 'TetrisController*' in initialization
我也試過
Bind(wxEVT_TIMER, &TetrisController::onTimer, this, ID_TIMER); // this points to the Board
,我得到了第二個錯誤。我真的很想知道如何正確使用Bind()函數。
欣賞當你解決問題時回來回答的努力。 – ubuntugod