Boost Novelty, Boost :: Bind Nightmare

I have this header (redone from boost asio example):

#ifndef MSGSRV_H_ #define MSGSRV_H_ #include <asio.hpp> #include <boost/array.hpp> #include <boost/bind.hpp> #include <boost/shared_ptr.hpp> #include <boost/system/error_code.hpp> namespace msgSrv { class msgSrv { private: asio::ip::udp::socket *asioSocket; asio::io_service *asioIoService; int listenPort; boost::array<char,1> rcvBuff; asio::ip::udp::endpoint lastRcvdPcktEndp; public: msgSrv(int listenPort); virtual ~msgSrv(); void start(); void pckRcvd( boost::system::error_code &, std::size_t); }; } 

and .cpp:

 #include "msgSrv.h" namespace msgSrv { msgSrv::msgSrv(int listenPort) { // TODO Auto-generated constructor stub this->listenPort = listenPort; try{ asioIoService = new asio::io_service(); asioSocket = new asio::ip::udp::socket(*asioIoService, asio::ip::udp::endpoint(asio::ip::udp::v4(), listenPort)); //new asio::ip::udp::socket_(*asioIoService, udp::endpoint(udp::v4(), listenPort)); }catch(std::exception &e){ std::cerr << "Error initializing ioservice or socket:" << e.what(); } } msgSrv::~msgSrv() { // TODO Auto-generated destructor stub delete asioIoService; delete asioSocket; } void msgSrv::start(){ asioSocket->async_receive_from( asio::buffer(rcvBuff), lastRcvdPcktEndp, boost::bind(&msgSrv::pckRcvd, this, asio::placeholders::error, asio::placeholders::bytes_transferred)); } void msgSrv::pckRcvd( boost::system::error_code &error, std::size_t bytesRcvd){ std::cout << "Rcvd!\n"; } } 

Now he refuses to compile, giving unobvious results:

 > make all Building file: ../src/msgSrv/msgSrv.cpp Invoking: GCC C++ Compiler g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/msgSrv/msgSrv.d" -MT"src/msgSrv/msgSrv.d" -o"src/msgSrv/msgSrv.o" "../src/msgSrv/msgSrv.cpp" /usr/include/boost/bind.hpp: In member function 'void boost::_bi::list3<A1, A2, A3>::operator()(boost::_bi::type<void>, F&, A&, int) [with F = boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, A = boost::_bi::list2<asio::error::basic_errors&, int&>, A1 = boost::_bi::value<msgSrv::msgSrv*>, A2 = boost::arg<1> (*)(), A3 = boost::arg<2> (*)()]': /usr/include/boost/bind/bind_template.hpp:61: instantiated from 'typename boost::_bi::result_traits<R, F>::type boost::_bi::bind_t<R, F, L>::operator()(A1&, A2&) [with A1 = asio::error::basic_errors, A2 = int, R = void, F = boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, L = boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()>]' /usr/include/asio/detail/bind_handler.hpp:95: instantiated from 'void asio::detail::binder2<Handler, Arg1, Arg2>::operator()() [with Handler = boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, Arg1 = asio::error::basic_errors, Arg2 = int]' /usr/include/asio/handler_invoke_hook.hpp:62: instantiated from 'void asio::asio_handler_invoke(Function, ...) [with Function = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error::basic_errors, int>]' /usr/include/asio/detail/handler_invoke_helpers.hpp:39: instantiated from 'void asio_handler_invoke_helpers::invoke(const Function&, Context*) [with Function = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error::basic_errors, int>, Context = boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >]' /usr/include/asio/detail/bind_handler.hpp:129: instantiated from 'void asio::detail::asio_handler_invoke(const Function&, asio::detail::binder2<Handler, Arg1, Arg2>*) [with Function = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error::basic_errors, int>, Handler = boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, Arg1 = asio::error::basic_errors, Arg2 = int]' /usr/include/asio/detail/handler_invoke_helpers.hpp:39: instantiated from 'void asio_handler_invoke_helpers::invoke(const Function&, Context*) [with Function = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error::basic_errors, int>, Context = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error::basic_errors, int>]' /usr/include/asio/detail/handler_queue.hpp:191: instantiated from 'static void asio::detail::handler_queue::handler_wrapper<Handler>::do_call(asio::detail::handler_queue::handler*) [with Handler = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error::basic_errors, int>]' /usr/include/asio/detail/handler_queue.hpp:171: instantiated from 'asio::detail::handler_queue::handler_wrapper<Handler>::handler_wrapper(Handler) [with Handler = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error::basic_errors, int>]' /usr/include/asio/detail/handler_alloc_helpers.hpp:137: instantiated from 'asio::detail::handler_ptr<Alloc_Traits>::handler_ptr(asio::detail::raw_handler_ptr<Alloc_Traits>&, Arg1&) [with Arg1 = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error::basic_errors, int>, Alloc_Traits = asio::detail::handler_alloc_traits<asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error::basic_errors, int>, asio::detail::handler_queue::handler_wrapper<asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error::basic_errors, int> > >]' /usr/include/asio/detail/handler_queue.hpp:116: instantiated from 'static asio::detail::handler_queue::handler* asio::detail::handler_queue::wrap(Handler) [with Handler = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error::basic_errors, int>]' /usr/include/asio/detail/task_io_service.hpp:190: instantiated from 'void asio::detail::task_io_service<Task>::post(Handler) [with Handler = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error::basic_errors, int>, Task = asio::detail::epoll_reactor<false>]' /usr/include/asio/impl/io_service.ipp:125: instantiated from 'void asio::io_service::post(Handler) [with CompletionHandler = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error::basic_errors, int>]' /usr/include/asio/detail/reactive_socket_service.hpp:1376: instantiated from 'void asio::detail::reactive_socket_service<Protocol, Reactor>::async_receive_from(asio::detail::reactive_socket_service<Protocol, Reactor>::implementation_type&, const MutableBufferSequence&, typename Protocol::endpoint&, int, Handler) [with MutableBufferSequence = asio::mutable_buffers_1, Handler = boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, Protocol = asio::ip::udp, Reactor = asio::detail::epoll_reactor<false>]' /usr/include/asio/datagram_socket_service.hpp:310: instantiated from 'void asio::datagram_socket_service<Protocol>::async_receive_from(typename asio::detail::reactive_socket_service<Protocol, asio::detail::epoll_reactor<false> >::implementation_type&, const MutableBufferSequence&, typename Protocol::endpoint&, int, ReadHandler) [with MutableBufferSequence = asio::mutable_buffers_1, ReadHandler = boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, Protocol = asio::ip::udp]' /usr/include/asio/basic_datagram_socket.hpp:756: instantiated from 'void asio::basic_datagram_socket<Protocol, DatagramSocketService>::async_receive_from(const MutableBufferSequence&, typename Protocol::endpoint&, ReadHandler) [with MutableBufferSequence = asio::mutable_buffers_1, ReadHandler = boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, Protocol = asio::ip::udp, DatagramSocketService = asio::datagram_socket_service<asio::ip::udp>]' ../src/msgSrv/msgSrv.cpp:37: instantiated from here /usr/include/boost/bind.hpp:348: error: no match for call to '(boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>) (msgSrv::msgSrv*&, 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 = msgSrv::msgSrv, A1 = boost::system::error_code&, A2 = 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 = msgSrv::msgSrv, A1 = boost::system::error_code&, A2 = unsigned int] /usr/include/boost/bind.hpp: In member function 'void boost::_bi::list3<A1, A2, A3>::operator()(boost::_bi::type<void>, F&, A&, int) [with F = boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, A = boost::_bi::list2<asio::error_code&, int&>, A1 = boost::_bi::value<msgSrv::msgSrv*>, A2 = boost::arg<1> (*)(), A3 = boost::arg<2> (*)()]': /usr/include/boost/bind/bind_template.hpp:61: instantiated from 'typename boost::_bi::result_traits<R, F>::type boost::_bi::bind_t<R, F, L>::operator()(A1&, A2&) [with A1 = asio::error_code, A2 = int, R = void, F = boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, L = boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()>]' /usr/include/asio/detail/bind_handler.hpp:95: instantiated from 'void asio::detail::binder2<Handler, Arg1, Arg2>::operator()() [with Handler = boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, Arg1 = asio::error_code, Arg2 = int]' /usr/include/asio/handler_invoke_hook.hpp:62: instantiated from 'void asio::asio_handler_invoke(Function, ...) [with Function = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, int>]' /usr/include/asio/detail/handler_invoke_helpers.hpp:39: instantiated from 'void asio_handler_invoke_helpers::invoke(const Function&, Context*) [with Function = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, int>, Context = boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >]' /usr/include/asio/detail/bind_handler.hpp:129: instantiated from 'void asio::detail::asio_handler_invoke(const Function&, asio::detail::binder2<Handler, Arg1, Arg2>*) [with Function = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, int>, Handler = boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, Arg1 = asio::error_code, Arg2 = int]' /usr/include/asio/detail/handler_invoke_helpers.hpp:39: instantiated from 'void asio_handler_invoke_helpers::invoke(const Function&, Context*) [with Function = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, int>, Context = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, int>]' /usr/include/asio/detail/handler_queue.hpp:191: instantiated from 'static void asio::detail::handler_queue::handler_wrapper<Handler>::do_call(asio::detail::handler_queue::handler*) [with Handler = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, int>]' /usr/include/asio/detail/handler_queue.hpp:171: instantiated from 'asio::detail::handler_queue::handler_wrapper<Handler>::handler_wrapper(Handler) [with Handler = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, int>]' /usr/include/asio/detail/handler_alloc_helpers.hpp:137: instantiated from 'asio::detail::handler_ptr<Alloc_Traits>::handler_ptr(asio::detail::raw_handler_ptr<Alloc_Traits>&, Arg1&) [with Arg1 = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, int>, Alloc_Traits = asio::detail::handler_alloc_traits<asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, int>, asio::detail::handler_queue::handler_wrapper<asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, int> > >]' /usr/include/asio/detail/handler_queue.hpp:116: instantiated from 'static asio::detail::handler_queue::handler* asio::detail::handler_queue::wrap(Handler) [with Handler = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, int>]' /usr/include/asio/detail/task_io_service.hpp:190: instantiated from 'void asio::detail::task_io_service<Task>::post(Handler) [with Handler = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, int>, Task = asio::detail::epoll_reactor<false>]' /usr/include/asio/impl/io_service.ipp:125: instantiated from 'void asio::io_service::post(Handler) [with CompletionHandler = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, int>]' /usr/include/asio/detail/reactive_socket_service.hpp:1390: instantiated from 'void asio::detail::reactive_socket_service<Protocol, Reactor>::async_receive_from(asio::detail::reactive_socket_service<Protocol, Reactor>::implementation_type&, const MutableBufferSequence&, typename Protocol::endpoint&, int, Handler) [with MutableBufferSequence = asio::mutable_buffers_1, Handler = boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, Protocol = asio::ip::udp, Reactor = asio::detail::epoll_reactor<false>]' /usr/include/asio/datagram_socket_service.hpp:310: instantiated from 'void asio::datagram_socket_service<Protocol>::async_receive_from(typename asio::detail::reactive_socket_service<Protocol, asio::detail::epoll_reactor<false> >::implementation_type&, const MutableBufferSequence&, typename Protocol::endpoint&, int, ReadHandler) [with MutableBufferSequence = asio::mutable_buffers_1, ReadHandler = boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, Protocol = asio::ip::udp]' /usr/include/asio/basic_datagram_socket.hpp:756: instantiated from 'void asio::basic_datagram_socket<Protocol, DatagramSocketService>::async_receive_from(const MutableBufferSequence&, typename Protocol::endpoint&, ReadHandler) [with MutableBufferSequence = asio::mutable_buffers_1, ReadHandler = boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, Protocol = asio::ip::udp, DatagramSocketService = asio::datagram_socket_service<asio::ip::udp>]' ../src/msgSrv/msgSrv.cpp:37: instantiated from here /usr/include/boost/bind.hpp:348: error: no match for call to '(boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>) (msgSrv::msgSrv*&, asio::error_code&, 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 = msgSrv::msgSrv, A1 = boost::system::error_code&, A2 = 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 = msgSrv::msgSrv, A1 = boost::system::error_code&, A2 = unsigned int] /usr/include/boost/bind.hpp: In member function 'void boost::_bi::list3<A1, A2, A3>::operator()(boost::_bi::type<void>, F&, A&, int) [with F = boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, A = boost::_bi::list2<asio::error_code&, unsigned int&>, A1 = boost::_bi::value<msgSrv::msgSrv*>, A2 = boost::arg<1> (*)(), A3 = boost::arg<2> (*)()]': /usr/include/boost/bind/bind_template.hpp:61: instantiated from 'typename boost::_bi::result_traits<R, F>::type boost::_bi::bind_t<R, F, L>::operator()(A1&, A2&) [with A1 = asio::error_code, A2 = unsigned int, R = void, F = boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, L = boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()>]' /usr/include/asio/detail/bind_handler.hpp:95: instantiated from 'void asio::detail::binder2<Handler, Arg1, Arg2>::operator()() [with Handler = boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, Arg1 = asio::error_code, Arg2 = unsigned int]' /usr/include/asio/handler_invoke_hook.hpp:62: instantiated from 'void asio::asio_handler_invoke(Function, ...) [with Function = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, unsigned int>]' /usr/include/asio/detail/handler_invoke_helpers.hpp:39: instantiated from 'void asio_handler_invoke_helpers::invoke(const Function&, Context*) [with Function = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, unsigned int>, Context = boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >]' /usr/include/asio/detail/bind_handler.hpp:129: instantiated from 'void asio::detail::asio_handler_invoke(const Function&, asio::detail::binder2<Handler, Arg1, Arg2>*) [with Function = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, unsigned int>, Handler = boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, Arg1 = asio::error_code, Arg2 = unsigned int]' /usr/include/asio/detail/handler_invoke_helpers.hpp:39: instantiated from 'void asio_handler_invoke_helpers::invoke(const Function&, Context*) [with Function = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, unsigned int>, Context = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, unsigned int>]' /usr/include/asio/detail/handler_queue.hpp:191: instantiated from 'static void asio::detail::handler_queue::handler_wrapper<Handler>::do_call(asio::detail::handler_queue::handler*) [with Handler = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, unsigned int>]' /usr/include/asio/detail/handler_queue.hpp:171: instantiated from 'asio::detail::handler_queue::handler_wrapper<Handler>::handler_wrapper(Handler) [with Handler = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, unsigned int>]' /usr/include/asio/detail/handler_alloc_helpers.hpp:137: instantiated from 'asio::detail::handler_ptr<Alloc_Traits>::handler_ptr(asio::detail::raw_handler_ptr<Alloc_Traits>&, Arg1&) [with Arg1 = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, unsigned int>, Alloc_Traits = asio::detail::handler_alloc_traits<asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, unsigned int>, asio::detail::handler_queue::handler_wrapper<asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, unsigned int> > >]' /usr/include/asio/detail/handler_queue.hpp:116: instantiated from 'static asio::detail::handler_queue::handler* asio::detail::handler_queue::wrap(Handler) [with Handler = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, unsigned int>]' /usr/include/asio/detail/task_io_service.hpp:190: instantiated from 'void asio::detail::task_io_service<Task>::post(Handler) [with Handler = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, unsigned int>, Task = asio::detail::epoll_reactor<false>]' /usr/include/asio/impl/io_service.ipp:125: instantiated from 'void asio::io_service::post(Handler) [with CompletionHandler = asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), boost::arg<2> (*)()> >, asio::error_code, unsigned int>]' /usr/include/asio/detail/reactive_socket_service.hpp:1353: instantiated from 'void asio::detail::reactive_socket_service<Protocol, Reactor>::receive_from_operation<MutableBufferSequence, Handler>::complete(const asio::error_code&, size_t) [with MutableBufferSequence = asio::mutable_buffers_1, Handler = boost::_bi::bind_t<void, boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>, boost::_bi::list3<boost::_bi::value<msgSrv::msgSrv*>, boost::arg<1> (*)(), 

... and so on. I really don’t know what to do, because I can’t understand what a mistake is!

+4
source share
4 answers

Due to the large number of templates created, the error messages are quite long, but most of them give what may be a useful context. I made the first mistake and cut the lines too long.

At first, the compiler says where the error is, and what sequence of the template instances led to the fact that the particular template instance led to the creation of the error instance.

 /usr/include/boost/bind.hpp: In member function 'void boost::_bi::list3<A1, A2, A3>::operator()(boost::_bi::type<void>, F&, A&, int) ... /usr/include/boost/bind/bind_template.hpp:61: instantiated from ... /usr/include/asio/detail/bind_handler.hpp:95: instantiated from ... /usr/include/asio/handler_invoke_hook.hpp:62: instantiated from ... /usr/include/asio/detail/handler_invoke_helpers.hpp:39: instantiated from ... /usr/include/asio/detail/bind_handler.hpp:129: instantiated from ... /usr/include/asio/detail/handler_invoke_helpers.hpp:39: instantiated from ... /usr/include/asio/detail/handler_queue.hpp:191: instantiated from ... /usr/include/asio/detail/handler_queue.hpp:171: instantiated from ... /usr/include/asio/detail/handler_alloc_helpers.hpp:137: instantiated from ... /usr/include/asio/detail/handler_queue.hpp:116: instantiated from ... /usr/include/asio/detail/task_io_service.hpp:190: instantiated from ... /usr/include/asio/impl/io_service.ipp:125: instantiated from ... /usr/include/asio/detail/reactive_socket_service.hpp:1376: instantiated from ... /usr/include/asio/datagram_socket_service.hpp:310: instantiated from ... /usr/include/asio/basic_datagram_socket.hpp:756: instantiated from ... 

And here is the line of your code that led to all of this:

 ../src/msgSrv/msgSrv.cpp:37: instantiated from here 

And here is the real mistake:

 /usr/include/boost/bind.hpp:348: error: no match for call to '(boost::_mfi::mf2<void, msgSrv::msgSrv, boost::system::error_code&, unsigned int>) (msgSrv::msgSrv*&, 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 = msgSrv::msgSrv, A1 = boost::system::error_code&, A2 = 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 = msgSrv::msgSrv, A1 = boost::system::error_code&, A2 = unsigned int] 

In order to pass arguments, msgSrv::msgSrv*& converted to msgSrv::msgSrv* , but parameter A1 is a link, and boost::system::error_code and asio::error::basic_errors are not referenced.

Edit:

If you read the type requirements for the read handler , you will see that the handler works with the first parameter l - a value of type const error_code . This means that your first parameter must be either const boost::system::error_code& (i.e., a constant reference), or boost::system::error_code , not a reference parameter.

+15
source

Try STL Error Decryptor to help understand error messages from boilerplate code.

+4
source

boost:: asio, , :

/usr/include/boost/bind/bind_template.hpp:61: 'typename :: _ -:: result_traits:: :: _ :: bind_t:: () (A1 &, A2 &) [ A1 = asio:: error:: basic_errors , A2 = int , R = void, F = boost:: _ mfi:: mf2, L = boost:: _ bi:: list3bi:: , boost:: arg < 1 > ()(), boost:: arg < 2 > (*)() > ]

, pckRcvd :

 void pckRcvd(asio::error::basic_errors&, int&); 

, ?

+1
source

- . , ( ):

 boost::bind(&msgSrv::pckRcvd, this, asio::placeholders::error(),asio::placeholders::bytes_transferred()) 

pckRcvd :

 void msgSrv::pckRcvd(boost::system::error_code err, std::size_t siz) 

asioSocket->async_receive_from , :

 asioSocket->async_receive_from( asio::buffer(rcvBuff), lastRcvdPcktEndp, boost::bind(&msgSrv::pckRcvd, this, asio::placeholders::error(),asio::placeholders::bytes_transferred())); 

. :

./src/msgSrv/msgSrv.cpp: 43: : 'Bind (, msgSrv:: msgSrv * const, boost:: arg < 1 > , boost:: arg < 2 > ) /usr/include/boost/bind.hpp:1437: : : boost:: _ bi:: bind_t:: type > boost:: bind (F, A1, A2, A3) [ F = void (MsgSrv:: msgSrv:: *) (:: :: error_code,

size_t), A1 = msgSrv :: msgSrv *, A2 = boost :: arg <1>, A3 = boost :: arg <2>] / usr / include / boost / bind / bind _mf_cc.hpp: 67: Note:
increase :: _ bi :: bind_t, typename boost :: _ bi :: list_av_3 :: type> boost :: bind (R (T: :) (B1, B2), A1, A2, A3) [with R = void, T = msgSrv :: msgSrv, B1 = boost :: system :: error_code, B2 = size_t, A1 = msgSrv :: msgSrv, A2 = boost :: arg <1>, A3 = boost :: arg <2>]

It seems that the recipient needs a different signature, so I think I need to somehow change pckRcvd ... but ... how?

0
source

All Articles