2012-01-26 24 views
2

私はwxWidgets 2.9を使用していますが、Bind()関数に問題があります。 wxEvtHandlerためdocumentationが私に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 

を試してみましたが、私は2番目のエラーを取得します。私は本当にBind()関数を適切に使う方法を知りたいです。

答えて

2

私が使用していたイベントのタイプ(wxCommandEvent)についてコンパイラが不平を言っていました。 wxTimerEventに変更すると、バージョン2が動作し始めました。

+0

あなたが解決したときに回答に戻る努力を感謝します。 – ubuntugod