0

我在编译这段代码时遇到问题错误

/usr/include/boost/bind/bind_mf_cc.hpp:91:5: 错误:初始化'boost::_bi::bind_t, typename 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 = 无符号整数;B3 = boost::asio::basic_streambuf<>&; A1 = tcpReader*;A2 = boost::system::error_code; A3 = 无符号整数;A4 = boost::asio::basic_streambuf<>; 类型名 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 回答