尝试使用boost::bind
作为async_read_some
函数调用的参数编译程序时遇到问题。
如果我在下面使用此代码,则程序到达async_read_some
时将崩溃。
socket_.async_read_some(boost::asio::buffer(message_, 1024),
boost::bind(
&Session::print_message, self,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred)
);
void print_message(boost::system::error_code& ec, std::size_t length)
{
}
但是如果我删除boost::bind
并将其替换为lambda函数,它将可以正常工作。
socket_.async_read_some(boost::asio::buffer(message_, 1024),
[this, self](boost::system::error_code& ec, std::size_t length)
{
if (!ec)
{
std::cout << "made it" << std::endl;
}
std::cout << "Error: " << ec.message() << std::endl;
}
这是我在编译时收到的错误
'R boost::_mfi::mf2<R,Session,boost::system::error_code &,size_t>::operator ()(T *,A1,A2) const': cannot convert argument 2 from 'Arg1' to 'A1'
如果需要更多代码,请告诉我。
答案 0 :(得分:0)
正如@ rafix07所指出的,该程序崩溃是因为我没有为我的print_message
处理程序输入正确的参数。
需要切换:
void print_message(boost::system::error_code& ec, std::size_t length)
到
void print_message(const boost::system::error_code& ec, std::size_t length)