2012-07-17 117 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