2012-07-17 120 views
0

我有編譯這段代碼錯誤的升壓:ASIO:帶升壓read_until問題::綁定

/usr/include/boost/bind/bind_mf_cc.hpp:91:5一個問題:錯誤:初始化參數5:'boost :: _ bi :: bind_t,typename boost :: _ bi :: list_av_4 :: type> boost :: bind(R(T :: *)(B1,B2,B3),A1,A2,A3,A4 )[與R = void; T = tcpReader; B1 = const boost :: system :: error_code &; B2 = unsigned int; B3 = boost :: asio :: basic_streambuf <> &; A1 = tcpReader *; A2 = boost :: system :: error_code; A3 = unsigned int; A4 = boost :: asio :: basic_streambuf <>; typename boost :: _ bi :: list_av_4 :: type = boost :: _ bi :: list4,boost :: _ bi :: value,boost :: _ bi :: value,boost :: _ bi :: value >>]

void tcpReader::handle_read(const boost::system::error_code& ec, std::size_t bytes_transferred, boost::asio::streambuf& buf) 
// inside a class method 
boost::asio::streambuf buf; 
boost::asio::async_read_until(*sock,buf,"\n" , 
           boost::bind(&tcpReader::handle_read,this,error,buf.size(),buf) 
          ); 

有什麼問題是什麼想法?它我知道我錯過了一些簡單的東西,但我無法弄清楚它是否像我將不得不使用boot :: buffer?

在此先感謝

+0

你應該使用'提高:: ASIO ::佔位符:: error'和'的boost ::支持ASIO ::佔位符:: bytes_transferred',而不是'err'和'BUF。 size()'分別? – Chad 2012-07-17 15:34:46

+1

您也可能需要用'boost :: ref(buf)'來包裝最後的參數'buf'。 – Chad 2012-07-17 15:35:40

回答

1

對我來說,它看起來像,那)async_read_until的所有重載(需要兩個參數。你傳遞一個帶有3個參數的函數。可能你想傳遞流作爲額外的參數,將它綁定到該函數以獲得具有2個參數的函數。

boost::bind(&tcpReader::handle_read, this, _1, _2, boost::ref(buf)) 

將您的成員函數「轉換」爲某些東西,需要2個參數。 boost :: ref()包裝你的緩衝區作爲參考,否則將進行復制。

親切的問候 託斯滕

+0

現在看來,我的功能從來沒有被召喚出於某種原因,我沒有看到從handle_read任何想法的任何輸出? – gda2004 2012-07-17 15:48:29

+1

@ gda2004從你的例子來看,它看起來像流緩衝區沒有關聯任何類型的TCP套接字。 – 2012-07-17 15:57:47

+0

我認爲它可以簡單地直接讀入緩衝區? – gda2004 2012-07-17 16:02:18