1
我在编译时错误,努力尝试,因为我可能,我没有看到以什么方式做错了或不同于处理函数签名文档/例子。 (我在Linux上使用Boost 1.41)ASIO处理程序参数和boost :: bind,编译时错误
请帮我理解错误! (包含在下面作为片段)
我的应用程序具有对象,其方法是用于async_ *函数的处理程序。以下是代码片段。报道中标记为“第58行”,在这里我使用boost ::绑定行的错误
class RPC {
public:
char recv_buffer[56];
void data_recv (void) {
socket.async_read_some (
boost::asio::buffer(recv_buffer),
boost::bind (&RPC::on_data_recv, this, _1, _2)
); // **<<==== this is line 58, that shows up in error listing**
global_stream_lock.lock();
std::cout << "[" << boost::this_thread::get_id()
<< "] data recvd" << std::endl;
global_stream_lock.unlock();
} // RPC::data_recv
void on_data_recv (boost::system::error_code& ec, std::size_t bytesRx) {
global_stream_lock.lock();
std::cout << "[" << boost::this_thread::get_id()
<< "] bytes rcvd: " << std::endl;
global_stream_lock.unlock();
data_recv(); // call function that waits for more data
} // RPC::on_data_recv
}; // RPC class def
有一个巨大的错误输出,但相关的线似乎是:
../src/besw.cpp:58: instantiated from here
/usr/include/boost/bind/bind.hpp:385: error: no match for call to ‘(boost::_m fi::mf2<void, RPC, boost::system::error_code&, long unsigned int>) (RPC*&, boost::asio::error::basic_errors&, int&)’
/usr/include/boost/bind/mem_fn_template.hpp:272: note: candidates are: R boost::_mfi::mf2<R, T, A1, A2>::operator()(T*, A1, A2) const [with R = void, T = RPC, A1 = boost::system::error_code&, A2 = long unsigned int]
/usr/include/boost/bind/mem_fn_template.hpp:291: note: R boost::_mfi::mf2<R, T, A1, A2>::operator()(T&, A1, A2) const [with R = void, T = RPC, A1 = boost::system::error_code&, A2 = long unsigned int]
make: *** [src/besw.o] Error 1
当我删除占位符(_1和_2)并且没有参数的处理程序时,它会编译并执行而不会出错。这是修改后的代码片段。
void data_recv (void) {
socket.async_read_some (
boost::asio::buffer(recv_buffer),
boost::bind (&RPC::on_data_recv, this)
);
global_stream_lock.lock();
std::cout << "[" << boost::this_thread::get_id()
<< "] data recvd" << std::endl;
global_stream_lock.unlock();
} // RPC::data_recv
void on_data_recv (void) {
...
}