错误C2893-无法专用于功能模板VS2019

时间:2020-01-24 19:22:56

标签: c++ boost

我正在研究boost chat-multi beast示例提供的示例,而我正面临着这个问题

错误C2893无法专用于功能模板'未知类型std :: _ Mem_fn :: operator()(_ Types && ...)noexcept()const'顶点链W:\ apogee-sdk \ boost-1.72.0 \ boost \ beast \ core \ detail \ bind_handler.hpp 234

我的代码是:

void apogeeListener::onaccept(boost::beast::error_code& _error_code, boost::asio::ip::tcp::socket _socket) {
    if (_error_code) {
        return this->onfail(_error_code, "accept");
    }
    boost::make_shared<apogeeHTTPSession>(std::move(_socket), this->__state)->run();
    this->__acceptor.async_accept(boost::asio::make_strand(this->__io_context), boost::beast::bind_front_handler(&apogeeListener::onaccept, shared_from_this()));
}

,构造函数为:

apogeeListener::apogeeListener(boost::asio::io_context& _io_context, boost::asio::ip::tcp::endpoint _endpoint, boost::shared_ptr<apogeeState> const& _state) : __io_context(_io_context), __acceptor(_io_context), __state(_state) {
    boost::beast::error_code __error_code;
    this->__logger = new apogeeLogger("network-listener.log");
    this->__acceptor.open(_endpoint.protocol(), __error_code);
    if (__error_code) {
        this->onfail(__error_code, "open");
        return;
    }
    this->__acceptor.set_option(boost::asio::socket_base::reuse_address(true), __error_code);
    if (__error_code) {
        this->onfail(__error_code, "set_option");
        return;
    }
    this->__acceptor.bind(_endpoint, __error_code);
    if (__error_code) {
        this->onfail(__error_code, "bind");
        return;
    }
    this->__acceptor.listen(boost::asio::socket_base::max_listen_connections, __error_code);
    if (__error_code) {
        this->onfail(__error_code, "listen");
        return;
    }
}

the error message - picture.

编译器的输出是这样的,当我注释函数时一切正常,但是当我尝试使用未注释的函数进行编译时。然后出现错误。

1>------ Build started: Project: apogee-chain, Configuration: Debug x64 ------
1>apogeeListener.cpp
1>W:\apogee-interfaces\apogee-chain\apogee-chain\apogeePlatform.hpp(46,155): warning C4267: 'argument': conversion from 'size_t' to 'int', possible loss of data
1>W:\apogee-interfaces\apogee-chain\apogee-chain\apogeeState.h(10,50): warning C4227: anachronism used: qualifiers on reference are ignored
1>W:\apogee-sdk\boost-1.72.0\boost\beast\core\detail\bind_handler.hpp(235,20): error C2672: 'operator __surrogate_func': no matching overloaded function found
1>W:\apogee-sdk\boost-1.72.0\boost\beast\core\detail\bind_handler.hpp(257): message : see reference to function template instantiation 'void boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<T>>::invoke<0,Arg1&,_Ty>(std::true_type,boost::mp11::integer_sequence<unsigned __int64,0>,Arg1 &,_Ty &&)' being compiled
1>        with
1>        [
1>            T=apogeeNetwork::apogeeListener,
1>            Arg1=const boost::system::error_code,
1>            _Ty=other_socket_type
1>        ]
1>W:\apogee-sdk\boost-1.72.0\boost\beast\core\detail\bind_handler.hpp(258): message : see reference to function template instantiation 'void boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<T>>::invoke<0,Arg1&,_Ty>(std::true_type,boost::mp11::integer_sequence<unsigned __int64,0>,Arg1 &,_Ty &&)' being compiled
1>        with
1>        [
1>            T=apogeeNetwork::apogeeListener,
1>            Arg1=const boost::system::error_code,
1>            _Ty=other_socket_type
1>        ]
1>W:\apogee-sdk\boost-1.72.0\boost\asio\detail\bind_handler.hpp(667): message : see reference to function template instantiation 'void boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<T>>::operator ()<Arg1&,Arg2>(Arg1 &,Arg2 &&)' being compiled
1>        with
1>        [
1>            T=apogeeNetwork::apogeeListener,
1>            Arg1=const boost::system::error_code,
1>            Arg2=other_socket_type
1>        ]
1>W:\apogee-sdk\boost-1.72.0\boost\asio\detail\bind_handler.hpp(666): message : see reference to function template instantiation 'void boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<T>>::operator ()<Arg1&,Arg2>(Arg1 &,Arg2 &&)' being compiled
1>        with
1>        [
1>            T=apogeeNetwork::apogeeListener,
1>            Arg1=const boost::system::error_code,
1>            Arg2=other_socket_type
1>        ]
1>W:\apogee-sdk\boost-1.72.0\boost\asio\detail\bind_handler.hpp(665): message : while compiling class template member function 'void boost::asio::detail::move_binder2<Handler,boost::system::error_code,boost::asio::basic_stream_socket<Protocol,Executor1>>::operator ()(void)'
1>        with
1>        [
1>            Handler=boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<apogeeNetwork::apogeeListener>>,
1>            Protocol=boost::asio::ip::tcp,
1>            Executor1=boost::asio::strand<boost::asio::io_context::executor_type>
1>        ]
1>W:\apogee-sdk\boost-1.72.0\boost\asio\detail\executor_function.hpp(91): message : see reference to function template instantiation 'void boost::asio::detail::move_binder2<Handler,boost::system::error_code,boost::asio::basic_stream_socket<Protocol,Executor1>>::operator ()(void)' being compiled
1>        with
1>        [
1>            Handler=boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<apogeeNetwork::apogeeListener>>,
1>            Protocol=boost::asio::ip::tcp,
1>            Executor1=boost::asio::strand<boost::asio::io_context::executor_type>
1>        ]
1>W:\apogee-sdk\boost-1.72.0\boost\asio\detail\win_iocp_socket_accept_op.hpp(270): message : see reference to class template instantiation 'boost::asio::detail::move_binder2<Handler,boost::system::error_code,boost::asio::basic_stream_socket<Protocol,Executor1>>' being compiled
1>        with
1>        [
1>            Handler=boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<apogeeNetwork::apogeeListener>>,
1>            Protocol=boost::asio::ip::tcp,
1>            Executor1=boost::asio::strand<boost::asio::io_context::executor_type>
1>        ]
1>W:\apogee-sdk\boost-1.72.0\boost\asio\detail\win_iocp_socket_accept_op.hpp(210): message : while compiling class template member function 'void boost::asio::detail::win_iocp_socket_move_accept_op<boost::asio::ip::tcp,PeerIoExecutor,Handler,IoExecutor>::do_complete(void *,boost::asio::detail::operation *,const boost::system::error_code &,size_t)'
1>        with
1>        [
1>            PeerIoExecutor=boost::asio::strand<boost::asio::io_context::executor_type>,
1>            Handler=boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<apogeeNetwork::apogeeListener>>,
1>            IoExecutor=boost::asio::detail::io_object_executor<boost::asio::executor>
1>        ]
1>W:\apogee-sdk\boost-1.72.0\boost\asio\detail\win_iocp_socket_accept_op.hpp(179): message : see reference to function template instantiation 'void boost::asio::detail::win_iocp_socket_move_accept_op<boost::asio::ip::tcp,PeerIoExecutor,Handler,IoExecutor>::do_complete(void *,boost::asio::detail::operation *,const boost::system::error_code &,size_t)' being compiled
1>        with
1>        [
1>            PeerIoExecutor=boost::asio::strand<boost::asio::io_context::executor_type>,
1>            Handler=boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<apogeeNetwork::apogeeListener>>,
1>            IoExecutor=boost::asio::detail::io_object_executor<boost::asio::executor>
1>        ]
1>W:\apogee-sdk\boost-1.72.0\boost\asio\detail\win_iocp_socket_service.hpp(526): message : see reference to class template instantiation 'boost::asio::detail::win_iocp_socket_move_accept_op<boost::asio::ip::tcp,PeerIoExecutor,Handler,IoExecutor>' being compiled
1>        with
1>        [
1>            PeerIoExecutor=boost::asio::strand<boost::asio::io_context::executor_type>,
1>            Handler=boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<apogeeNetwork::apogeeListener>>,
1>            IoExecutor=boost::asio::detail::io_object_executor<boost::asio::executor>
1>        ]
1>W:\apogee-sdk\boost-1.72.0\boost\asio\basic_socket_acceptor.hpp(2473): message : see reference to function template instantiation 'void boost::asio::detail::win_iocp_socket_service<Protocol>::async_move_accept<Executor1,boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<T>>,boost::asio::detail::io_object_executor<Executor>>(boost::asio::detail::win_iocp_socket_service<Protocol>::implementation_type &,const PeerIoExecutor &,boost::asio::ip::basic_endpoint<boost::asio::ip::tcp> *,Handler &,const IoExecutor &)' being compiled
1>        with
1>        [
1>            Protocol=boost::asio::ip::tcp,
1>            Executor1=boost::asio::strand<boost::asio::io_context::executor_type>,
1>            T=apogeeNetwork::apogeeListener,
1>            Executor=boost::asio::executor,
1>            PeerIoExecutor=boost::asio::strand<boost::asio::io_context::executor_type>,
1>            Handler=boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<apogeeNetwork::apogeeListener>>,
1>            IoExecutor=boost::asio::detail::io_object_executor<boost::asio::executor>
1>        ]
1>W:\apogee-sdk\boost-1.72.0\boost\asio\basic_socket_acceptor.hpp(2471): message : see reference to function template instantiation 'void boost::asio::detail::win_iocp_socket_service<Protocol>::async_move_accept<Executor1,boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<T>>,boost::asio::detail::io_object_executor<Executor>>(boost::asio::detail::win_iocp_socket_service<Protocol>::implementation_type &,const PeerIoExecutor &,boost::asio::ip::basic_endpoint<boost::asio::ip::tcp> *,Handler &,const IoExecutor &)' being compiled
1>        with
1>        [
1>            Protocol=boost::asio::ip::tcp,
1>            Executor1=boost::asio::strand<boost::asio::io_context::executor_type>,
1>            T=apogeeNetwork::apogeeListener,
1>            Executor=boost::asio::executor,
1>            PeerIoExecutor=boost::asio::strand<boost::asio::io_context::executor_type>,
1>            Handler=boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<apogeeNetwork::apogeeListener>>,
1>            IoExecutor=boost::asio::detail::io_object_executor<boost::asio::executor>
1>        ]
1>W:\apogee-sdk\boost-1.72.0\boost\asio\async_result.hpp(150): message : see reference to function template instantiation 'void boost::asio::basic_socket_acceptor<boost::asio::ip::tcp,boost::asio::executor>::initiate_async_move_accept::operator ()<RawCompletionToken,Executor1,other_socket_type>(MoveAcceptHandler &&,const Executor1 &,boost::asio::ip::basic_endpoint<boost::asio::ip::tcp> *,Socket *) const' being compiled
1>        with
1>        [
1>            RawCompletionToken=boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<apogeeNetwork::apogeeListener>>,
1>            Executor1=boost::asio::strand<boost::asio::io_context::executor_type>,
1>            MoveAcceptHandler=boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<apogeeNetwork::apogeeListener>>,
1>            Socket=other_socket_type
1>        ]
1>W:\apogee-sdk\boost-1.72.0\boost\asio\async_result.hpp(151): message : see reference to function template instantiation 'void boost::asio::basic_socket_acceptor<boost::asio::ip::tcp,boost::asio::executor>::initiate_async_move_accept::operator ()<RawCompletionToken,Executor1,other_socket_type>(MoveAcceptHandler &&,const Executor1 &,boost::asio::ip::basic_endpoint<boost::asio::ip::tcp> *,Socket *) const' being compiled
1>        with
1>        [
1>            RawCompletionToken=boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<apogeeNetwork::apogeeListener>>,
1>            Executor1=boost::asio::strand<boost::asio::io_context::executor_type>,
1>            MoveAcceptHandler=boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<apogeeNetwork::apogeeListener>>,
1>            Socket=other_socket_type
1>        ]
1>W:\apogee-sdk\boost-1.72.0\boost\asio\async_result.hpp(362): message : see reference to function template instantiation 'boost::asio::async_result<boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<T>>,Signature>::return_type boost::asio::async_result<boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<T>>,Signature>::initiate<Initiation,CompletionToken,const Executor1&,boost::asio::ip::basic_endpoint<boost::asio::ip::tcp>*,other_socket_type*>(Initiation &&,RawCompletionToken &&,const Executor1 &,boost::asio::ip::basic_endpoint<boost::asio::ip::tcp> *&&,other_socket_type *&&)' being compiled
1>        with
1>        [
1>            T=apogeeNetwork::apogeeListener,
1>            Signature=void (boost::system::error_code,other_socket_type),
1>            Initiation=boost::asio::basic_socket_acceptor<boost::asio::ip::tcp,boost::asio::executor>::initiate_async_move_accept,
1>            CompletionToken=boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<apogeeNetwork::apogeeListener>>,
1>            Executor1=boost::asio::strand<boost::asio::io_context::executor_type>,
1>            RawCompletionToken=boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<apogeeNetwork::apogeeListener>>
1>        ]
1>W:\apogee-sdk\boost-1.72.0\boost\asio\async_result.hpp(363): message : see reference to function template instantiation 'boost::asio::async_result<boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<T>>,Signature>::return_type boost::asio::async_result<boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<T>>,Signature>::initiate<Initiation,CompletionToken,const Executor1&,boost::asio::ip::basic_endpoint<boost::asio::ip::tcp>*,other_socket_type*>(Initiation &&,RawCompletionToken &&,const Executor1 &,boost::asio::ip::basic_endpoint<boost::asio::ip::tcp> *&&,other_socket_type *&&)' being compiled
1>        with
1>        [
1>            T=apogeeNetwork::apogeeListener,
1>            Signature=void (boost::system::error_code,other_socket_type),
1>            Initiation=boost::asio::basic_socket_acceptor<boost::asio::ip::tcp,boost::asio::executor>::initiate_async_move_accept,
1>            CompletionToken=boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<apogeeNetwork::apogeeListener>>,
1>            Executor1=boost::asio::strand<boost::asio::io_context::executor_type>,
1>            RawCompletionToken=boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<apogeeNetwork::apogeeListener>>
1>        ]
1>W:\apogee-sdk\boost-1.72.0\boost\asio\basic_socket_acceptor.hpp(1821): message : see reference to function template instantiation 'void boost::asio::async_initiate<MoveAcceptHandler,void(boost::system::error_code,other_socket_type),boost::asio::basic_socket_acceptor<boost::asio::ip::tcp,boost::asio::executor>::initiate_async_move_accept,const Executor1&,boost::asio::ip::basic_endpoint<boost::asio::ip::tcp>*,other_socket_type*>(Initiation &&,CompletionToken &,const Executor1 &,boost::asio::ip::basic_endpoint<boost::asio::ip::tcp> *&&,other_socket_type *&&)' being compiled
1>        with
1>        [
1>            MoveAcceptHandler=boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<apogeeNetwork::apogeeListener>>,
1>            Executor1=boost::asio::strand<boost::asio::io_context::executor_type>,
1>            Initiation=boost::asio::basic_socket_acceptor<boost::asio::ip::tcp,boost::asio::executor>::initiate_async_move_accept,
1>            CompletionToken=boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<apogeeNetwork::apogeeListener>>
1>        ]
1>W:\apogee-interfaces\apogee-chain\apogee-chain\apogeeListener.cpp(15): message : see reference to function template instantiation 'void boost::asio::basic_socket_acceptor<boost::asio::ip::tcp,boost::asio::executor>::async_accept<boost::asio::strand<boost::asio::io_context::executor_type>,boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<T>>>(const Executor1 &,MoveAcceptHandler &&,void *)' being compiled
1>        with
1>        [
1>            T=apogeeNetwork::apogeeListener,
1>            Executor1=boost::asio::strand<boost::asio::io_context::executor_type>,
1>            MoveAcceptHandler=boost::beast::detail::bind_front_wrapper<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket),boost::shared_ptr<apogeeNetwork::apogeeListener>>
1>        ]
1>W:\apogee-sdk\boost-1.72.0\boost\beast\core\string.hpp(56): message : see reference to class template instantiation 'boost::basic_string_view<char,std::char_traits<char>>' being compiled
1>W:\apogee-sdk\boost-1.72.0\boost\asio\use_future.hpp(139): message : see reference to class template instantiation 'boost::asio::use_future_t<std::allocator<void>>::std_allocator_void' being compiled
1>W:\apogee-sdk\boost-1.72.0\boost\asio\use_future.hpp(147): message : see reference to class template instantiation 'boost::asio::use_future_t<std::allocator<void>>' being compiled
1>W:\apogee-sdk\boost-1.72.0\boost\beast\core\detail\bind_handler.hpp(234,1): error C2893: Failed to specialize function template 'unknown-type std::_Mem_fn<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket)>::operator ()(_Types &&...) noexcept(<expr>) const'
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include\functional(644): message : see declaration of 'std::_Mem_fn<void (__cdecl apogeeNetwork::apogeeListener::* )(boost::beast::error_code &,boost::asio::ip::tcp::socket)>::operator ()'
1>W:\apogee-sdk\boost-1.72.0\boost\beast\core\detail\bind_handler.hpp(234,1): message : With the following template arguments:
1>W:\apogee-sdk\boost-1.72.0\boost\beast\core\detail\bind_handler.hpp(234,1): message : '_Types={T, Arg1 &, _Ty}'
1>Done building project "apogee-chain.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

0 个答案:

没有答案
相关问题