tags:

views:

1018

answers:

4

Hello, I've got this header (redone from a 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 the .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, it refuses to compile, giving un-intelligible 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 since I can't understand what the error is about!

+1  A: 

I don't have first-hand experience with boost::asio, but looking at the error message:

/usr/include/boost/bind/bind_template.hpp:61: instantiated from ‘typename boost::_bi::result_traits::type boost::_bi::bind_t::operator()(A1&, A2&) [with A1 = asio::error::basic_errors, A2 = int, R = void, F = boost::_mfi::mf2, L = boost::bi::list3bi::value, boost::arg<1> ()(), boost::arg<2> ()()>]’

it expects pckRcvd to have the following signature:

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

Could you try that and post back if it doesn't work?

Kim Gräsman
Doesn't work. Anyway the example I copied from the tutorial has the same signature I used, and it works if I try to compile it! So probably it's something stupid I'm missing!
gotch4
+6  A: 

Due to the large number of templates instantiated, the error messages are quite long, but most of it is giving what could be helpful context. I've taken the first error and snipped the excessively long lines.

First the compiler says where the error is, and what sequence of template instantiations resulted in the particular template instance the resulted in the error to be instantiated.

/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 resulted in all that happening:

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

And here is the real error:

/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]

For the purposes of argument passing, msgSrv::msgSrv*& will convert to msgSrv::msgSrv*, but the A1 parameter is a reference and boost::system::error_code and asio::error::basic_errors are not reference-compatible.

Edit:

If you read the type requirements for a read handler, you'll see that the handler has work with a first parameter that is l-value of type const error_code. This means that your first parameter has to be either const boost::system::error_code& (i.e. a const reference) or boost::system::error_code, a non-reference parameter.

Charles Bailey
Thanks a lot, I still have to get back to my box and try if all this works, but let just tell me thank you for your work trying to explain. I love this site, it's full of *real* programmers with great experience. Thanks a lot, I'll try this later.
gotch4
Great explanation
Gilad Naor
+4  A: 

Try out the STL Error Decryptor for assistance in understanding error messages from templated code.

Gilad Naor
A: 

Still won't go. I found that it accepts this call to bind (if I do it alone):

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

with pckRcvd like this:

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

when I insert it in the asioSocket->async_receive_from using:

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

it'll start complaining. The main error is:

./src/msgSrv/msgSrv.cpp:43: error: no matching function for call to ‘bind(, msgSrv::msgSrv* const, boost::arg<1>, boost::arg<2>)’ /usr/include/boost/bind.hpp:1437: note: candidates are: boost::_bi::bind_t::type> boost::bind(F, A1, A2, A3) [with F = void (msgSrv::msgSrv::*)(boost::system::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:
boost::_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>]

Seems that the receive wants a different signature, so I think I should modify pckRcvd somehow... but... how?

gotch4