[英]Error using boost::signals2::signal as handler
在下面的代码中:
boost::signals2::signal<void(const boost::system::error_code&)> signal;
socket.async_connect(endpoint, boost::ref(signal));
(位于http://liveworkspace.org/code/e04910cbcc4cfd9e42e34d1af55c393e )
我收到此错误:
在boost / asio / detail / wrapped_handler.hpp:18:0,boost / asio / io_service.hpp:24,boost / asio / basic_io_object.hpp:20,boost / asio / basic_socket.hpp:19包含的文件中,从boost / asio / basic_datagram_socket.hpp:20,从boost / asio.hpp:20,从source.cpp:2:boost / asio / detail / bind_handler.hpp:在成员函数'void boost :: asio :: detail :: binder1 <boost :: reference_wrapper>,boost :: system :: error_code :: operator()()':boost / asio / handler_invoke_hook.hpp:64:3:从'void boost :: asio :: asio_handler_invoke( boost :: asio :: detail :: binder1 <boost :: reference_wrapper>,boost :: system :: error_code,...)'boost / asio / detail / handler_invoke_helpers.hpp:39:3:从'void boost_asio_handler_invoke_helpers实例化: :invoke(const boost :: asio :: detail :: binder1 <boost :: reference_wrapper>,boost :: system :: error_code&,boost :: reference_wrapper>&)'boost / asio / detail / bind_handler.hpp:73: 3:从'void boost :: asio :: detail :: asio_handler_invoke(const boost :: asio :: detail :: b实例化 inder1 <boost :: reference_wrapper>,boost :: system :: error_code&,boost :: asio :: detail :: binder1 <boost :: reference_wrapper>,boost :: system :: error_code *)'boost / asio / detail / handler_invoke_helpers.hpp:39:3:从'void boost_asio_handler_invoke_helpers :: invoke(const boost :: asio :: detail :: binder1 <boost :: reference_wrapper>,boost :: system :: error_code&,boost :: asio ::实例化detail :: binder1 <boost :: reference_wrapper>,boost :: system :: error_code&)'boost / asio / detail / completion_handler.hpp:63:7:从'static void boost :: asio :: detail :: completion_handler实例化<boost :: asio :: detail :: binder1 <boost :: reference_wrapper>,boost :: system :: error_code
:: do_complete(boost :: asio :: detail :: boost :: asio :: detail :: task_io_service *,boost :: asio :: detail :: boost :: asio :: detail :: task_io_service_operation *,boost :: system :: error_code,unsigned int)'boost / asio / detail / completion_handler.hpp:38:17:从'boost :: asio :: detail :: completion_handler <boost :: asio :: detail :: binder1 <boost ::实例化reference_wrapper>,boost :: system :: error_code
:: completion_handler(boost :: asio :: detail :: binder1 <boost :: reference_wrapper> boost :: system :: error_code
)'boost / asio / detail / impl / task_io_service.hpp:50:3:从'void boost :: asio :: detail :: task_io_service :: post(boost :: asio :: detail :: binder1 <boost :: reference_wrapper>,boost :: system :: error_code
)'boost / asio / impl / io_service.hpp:80:3:从'void boost :: asio :: io_service :: post(Handler)实例化'boost / asio / basic_socket.hpp:649:9:从'void实例化boost :: asio :: basic_socket <boost :: asio :: ip :: tcp,boost :: asio :: stream_socket_service :: async_connect(boost :: asio :: basic_socket> :: boost :: asio :: ip :: basic_endpoint &,boost :: reference_wrapper>)'source.cpp:10:53:从此处实例化boost / asio / detail / bind_handler.hpp:40:5:错误:调用'(boost :: reference_wrapper>)不匹配( const boost :: system :: error_code&)'
看起来您的签名错误? 您需要为error_code指定一个占位符
尝试
boost::signals2::signal<void(const boost::system::error_code&)> signal;
socket.async_connect(endpoint, boost::bind(boost::ref(signal), _1));
拉尔夫的答案很接近,我认为您需要将占位符绑定到signal
函子:
#include <boost/signals2.hpp>
#include <boost/asio.hpp>
using namespace boost::asio;
int
main()
{
io_service ios;
ip::tcp::socket socket(ios);
const ip::tcp::endpoint endpoint(
ip::address::from_string(""),
0
);
boost::signals2::signal<void(const boost::system::error_code&)> signal;
socket.async_connect(
endpoint,
boost::bind(
boost::ref(signal), _1
)
);
}
例:
samm@macmini ~$ g++ -I /opt/local/include -L/opt/local/lib -Wl,-rpath,/opt/local/lib -lboost_system signal.cc
samm@macmini ~$ echo $?
0
samm@macmini ~$
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.