0

このコードのエラーをコンパイルする際に問題が発生しています

/usr/include/boost/bind/bind_mf_cc.hpp:91:5: エラー: 'boost::_bi::bind_t の引数 5 を初期化しています。タイプ名は boost::_bi::list_av_4::type> boost::bind(R (T::*)(B1、B2、B3)、A1、A2、A3、A4) [R = void; T = tcpReader; B1 = const boost::system::error_code&; B2 = 符号なし int; B3 = ブースト::asio::basic_streambuf<>&; A1 = tcpReader*; A2 = ブースト::システム::エラーコード; A3 = 符号なし int; A4 = ブースト::asio::basic_streambuf<>; typename boost::_bi::list_av_4::type = boost::_bi::list4, boost::_bi::value, boost::_bi::value, boost::_bi::value > >]

void tcpReader::handle_read(const boost::system::error_code& ec, std::size_t bytes_transferred, boost::asio::streambuf& buf)
// inside a class method
boost::asio::streambuf buf;
boost::asio::async_read_until(*sock,buf,"\n" ,
                              boost::bind(&tcpReader::handle_read,this,error,buf.size(),buf)
                              );

問題が何であるかについてのアイデアはありますか?簡単なものが欠けていることはわかっていますが、 boot::buffer を使用する必要があるようなものかわかりませんか?

前もって感謝します

4

1 に答える 1

1

私には、async_read_until() のすべてのオーバーロードが 2 つの引数を取るように見えます。3 つの引数を持つ関数を渡します。おそらく、ストリームを追加のパラメーターとして渡し、それを関数にバインドして、2 つの引数を持つ関数を取得します。

boost::bind( &tcpReader::handle_read, this, _1, _2, boost::ref( buf ) )

メンバー関数を、2 つの引数を取る何かに「変換」します。boost::ref() はバッファを参照としてラップします。そうしないと、コピーが作成されます。

よろしくトルステン

于 2012-07-17T15:39:25.323 に答える