2010-06-09 253 views
3

Man ...認爲在Boost中使用ASIO會變得簡單直觀。 :PBoost ASIO async_accept編譯失敗

我開始得到它,但我有一些麻煩。這是一個片段。 我在async_accept行有幾個編譯器錯誤。我究竟做錯了什麼? :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(提高:: ASIO :: basic_socket &,提高:: ASIO ::知識產權:: basic_endpoint &,AcceptHandler)」:預計3個 參數 - 2 提供的E:\ schoolcode \高級 項目\ cplusplusport \ cplusplusport \ alexsocket.cpp 36

錯誤2錯誤C2784: '無效 的boost ::支持ASIO :: basic_socket_acceptor :: async_accept(提高:: ASIO :: basic_socket &,AcceptHandler)':無法推斷 模板參數 'boost :: asio :: basic_socket &'from'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) 
{ 

} 
+0

向我們提供更多信息。你用'this'綁定到'AlexSocket :: NewConnection'作爲第一個參數 - 但據我所知,這個'不是'AlexSocket' - 是嗎? NewConnection方法是虛擬的嗎? – Thanatos 2010-06-09 04:09:36

+0

呃。我正試圖擺脫我編寫學習代碼時添加到所有類中的愚蠢的「MyName」前綴。 :P – bobber205 2010-06-09 04:15:09

+0

該方法*不*虛擬。 – bobber205 2010-06-09 04:15:57

回答

3

async_accept期望引用套接字,而不是指針,所以請嘗試

acceptor->async_accept(*tempNewSocket, ... 
+1

omg我真是笨!謝謝!!! :d – bobber205 2010-06-09 21:25:16