Boost ASIO async_accept编译失败

时间:2010-06-09 04:03:41

标签: c++ sockets boost bind boost-asio

Man ...想到在Boost中使用ASIO会变得简单直观。 :P

我最终开始得到它但我遇到了一些麻烦。这是一个片段。 我在async_accept行上遇到了几个编译器错误。我究竟做错了什么? :P

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

错误:

  

错误1错误C2780:'无效   提高:: ASIO :: basic_socket_acceptor :: async_accept(升压:: ASIO :: basic_socket   &安培;,提高:: ASIO ::知识产权:: basic_endpoint   &,AcceptHandler)':预计3   争论 - 2   提供了e:\ schoolcode \ senior   project \ cplusplusport \ cplusplusport \ alexsocket.cpp 36

     

错误2错误C2784:'无效   提高:: ASIO :: basic_socket_acceptor :: async_accept(升压:: ASIO :: basic_socket   &,AcceptHandler)':无法演绎   模板参数   “提高:: ASIO :: basic_socket   &安培;”来自'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 个答案:

答案 0 :(得分:3)

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

acceptor->async_accept(*tempNewSocket, ...