メンバー関数をAcceptHandlerとしてboost :: asioのasync_accept()メソッドに渡そうとしています。私は、コンパイルエラーは言ってます:リンクラインからboost :: asioメンバー関数をacceptor.async_accept()に渡す方法
を満たしていない
AcceptHandlerタイプの要件:
//あなたが次の行にエラーが発生した場合、それはあなたのことを意味しハンドラが、AcceptHandlerの文書化された型要件を満たしていません。 documentation
ハンドラは、このように見えるように持っていると言う:
void accept_handler(const boost::system::error_code& error) //documentation { if (!error) { // Accept succeeded. } }
私のメンバ関数は次のようになります。
void WifiConnector::onAccept(const boost::system::error_code &ec) //my code { if (ec) { std::cout << ec.message(); return; } socket.async_read_some(boost::asio::buffer(mBuffer), &WifiConnector::readHandler); }
私はそれには差は認められません。
しかし、私はこのようacceptor.async_accept()メソッドを呼び出す必要があります:それは私がとるメンバ関数であるため、
acceptor.async_accept(socket, &WifiConnector::onAccept); //my code
代わりの
acceptor.async_accept(socket, accept_handler); //documentation
。ドキュメントが示唆するように私がそれを渡そうとすると、次のようにエラーが表示されます:オーバーロードされた関数のインスタンスがありません。
メンバー関数を間違った方法で渡しているか、間違っていますか?
は編集:私は間違った方法または何にメンバ関数を渡していますので、 私はアクセプタなど
&WifiConnector :: onAcceptのオブジェクトはどこにありますか?静的メソッドではありません。 –
それは他のどこかで作成され、ちょうどスタートアップコールを取得します。その他のメソッド呼び出し( 'async_accept()'など)はすべてオブジェクト内で行われます。 – MrJonas