代码之家  ›  专栏  ›  技术社区  ›  bobber205

Boost ASIO异步接受编译失败

  •  3
  • bobber205  · 技术社区  · 15 年前

    男人…认为在Boost中使用ASIO将是简单和直观的。P

    我终于开始明白了,但我遇到了一些麻烦。这是一个片段。 我在异步接受行上有几个编译器错误。我做错什么了?P

    我的代码基于此页面: http://www.boost.org/doc/libs/1_43_0/doc/html/boost_asio/tutorial/tutdaytime3/src.html

    错误:

    错误1错误C2780:'无效 boost::asio::basic_socket_acceptor::async_accept(boost::asio::basic_socket &,boost::asio::ip::basic_端点 &,AcceptHandler)“:应为3 参数- 2 提供e:\schoolcode\senior 项目\cplusplusport\cplusplusport\alexsocket.cpp 36

    错误2错误C2784:'无效 boost::asio::basic_socket_acceptor::async_accept(boost::asio::basic_socket &,AcceptHandler)“:无法推导 的模板参数 'boost::asio::basic_套接字 &'来自'boost::asio::ip::tcp::socket *'E:\schoolcode\Senior Project\cplusplusport\cplusplusport\alexsocket.cpp 36

    bool TestSocket::StartListening(int port)
    {
        bool didStart = false;
    
        if (!this->listening)
        {
            //try to listen
            acceptor = new tcp::acceptor(this->myService, tcp::endpoint(tcp::v4(), port));
            didStart = true; //probably change?
            tcp::socket* tempNewSocket = new tcp::socket(this->myService);
            acceptor->async_accept(tempNewSocket, boost::bind(&TestSocket::NewConnection, this, tempNewSocket, boost::asio::placeholders::error) );
        }
        else //already started!
            return false;
    
        this->listening = didStart;
        return didStart;
    }
    
    void TestSocket::NewConnection(tcp::socket* s, const boost::system::error_code& error)
    {
    
    }
    
    1 回复  |  直到 11 年前
        1
  •  3
  •   Éric Malenfant    15 年前

    async_accept需要对套接字的引用,而不是指针,因此请尝试

    acceptor->async_accept(*tempNewSocket, ...