我遇到了绑定错误
/usr/local/include/boost/bind/bind.hpp:457:错误:无效使用void表达式
我的程序是关于使用回调处理程序的异步操作,如下所示:
template<typename Handler>
void async_monitor(Handler handler) {
stream_descriptor_.async_read_some(
boost::asio::buffer(read_buffer_),
boost::bind(&dir_monitor_impl::handle_monitor<Handler>, shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred,
handler));
}//IF I remove this code, the compilation success
处理程序声明:
template<typename Handler>
void handle_monitor(boost::system::error_code &ec,
std::size_t bytes_transferred, Handler handler){
}
最后,这些异步动作用作以下内容:
template <typename Handler>
void start_async_monitor(implementation_type &impl, Handler handler)
{
//this->async_monitor_io_service_.post(monitor_operation<Handler>(impl, this->get_io_service(), handler));
impl->async_monitor(handler);
}
你能帮我解释一下这个错误吗,非常感谢!
答案 0 :(得分:2)
处理程序签名必须如下(注意 const ):
void handle_monitor(const boost::system::error_code &ec, std::size_t bytes_transferred, Handler handler)