在以下代码中:
boost::signals2::signal<void(const boost::system::error_code&)> signal;
socket.async_connect(endpoint, boost::ref(signal));(在http://liveworkspace.org/code/e04910cbcc4cfd9e42e34d1af55c393e发现)
我知道这个错误:
文件中包含的
:20,boost/asio/basic_io_object.hpp:20,boost/asio/basic_socket.hpp:19,boost/asio/basic_datagram_socket.hpp:20,boost/asio.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::asio ::asio_handler_invoke( const boost::asio::detail::binder1< boost::reference_wrapper >,boost::system::error_code &,boost::asio::detail::binder1< boost::reference_wrapper >,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/asio/detail/completion_handler.hpp:63:7:实例化自静态空洞boost::boost::system::error_code::detail ::completion_handler< boost::asio::detail::binder1< boost::reference_wrapper >,boost::system::error_code
boost::asio::detail::boost::asio::detail::task_io_service *,boost::asio::detail::boost::asio::detail::task_io_service_operation *,boost::system::error_code,‘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 )
)从'void::asio::boost/asio/detail/impl/task_io_service.hpp:50:3:::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 &)’的调用。
发布于 2011-03-01 14:05:53
看来你的签名是错的?您需要为error_code指定一个占位符
试一试
boost::signals2::signal<void(const boost::system::error_code&)> signal;
socket.async_connect(endpoint, boost::bind(boost::ref(signal), _1));发布于 2011-03-01 23:17:05
Ralf的answer很接近,我认为您需要将占位符绑定到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 ~$ https://stackoverflow.com/questions/5148358
复制相似问题