4

我有这个标题(从 boost asio 示例中重做):

    #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);
};

}

和.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";
    }

}

现在,它拒绝编译,给出难以理解的结果:

> 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> (*)(), 

...等等。我真的不知道该怎么办,因为我不明白错误是什么!

4

4 回答 4

15

由于实例化了大量模板,错误消息很长,但其中大部分提供了可能有用的上下文。我已经采取了第一个错误并剪断了过长的行。

首先,编译器说明错误在哪里,以及模板实例化的顺序导致特定模板实例导致错误被实例化。

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

这是导致所有这些发生的代码行:

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

出于参数传递的目的,msgSrv::msgSrv*&将转换为msgSrv::msgSrv*,但A1参数是引用,boost::system::error_code并且asio::error::basic_errors兼容引用

编辑:

如果您阅读了读取处理程序的类型要求,您会看到该处理程序使用的第一个参数是类型的左值const error_code。这意味着您的第一个参数必须是const boost::system::error_code&(即 const 引用)boost::system::error_code或非引用参数。

于 2009-07-19T11:12:15.163 回答
4

尝试使用STL 错误解密器来帮助理解来自模板代码的错误消息。

于 2009-07-19T11:28:58.390 回答
1

我对 boost::asio 没有第一手经验,但是查看错误消息:

/usr/include/boost/bind/bind_template.hpp:61: 实例化自 '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> (*)()>]'</p>

它期望 pckRcvd 具有以下签名:

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

如果它不起作用,您可以尝试并回帖吗?

于 2009-07-19T10:02:03.510 回答
0

还是不会去。我发现它接受了这个绑定调用(如果我一个人做的话):

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) [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: 注意:
boost: :_bi::bind_t,类型名 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>]

似乎接收者想要一个不同的签名,所以我想我应该以某种方式修改 pckRcvd ......但是......如何?

于 2009-07-21T22:46:13.833 回答