2012-09-11 115 views
2

有人可以告訴我爲什麼不能編譯?boost :: bind與boost :: asio一起使用。 boost :: bind不工作,從示例中複製

void CClient::setResult(boost::optional<boost::system::error_code>* 
         a,boost::system::error_code b) 
{ 
    *a = b; 
} 

我結合()這樣的::

timer.async_wait(boost::bind(&CClient::setResult, &timer_result, _1)); 

我基本上從Kholkoff一個例子(http://lists.boost.org/Archives/boost/2007/04/120339.php)與超時複製它,早在2007年,大約閱讀()的插座這GCC版畫是不可讀給我的錯誤:

static assertion failed: WaitHandler type requirements not met remote_server  line 499, external location: /usr/include/boost/asio/basic_deadline_timer.hpp C/C++ Problem 
no match for call to ‘(boost::_bi::bind_t<boost::_bi::unspecified, void (CClient::*)(boost::optional<boost::system::error_code>*, boost::system::error_code), boost::_bi::list2<boost::_bi::value<boost::optional<boost::system::error_code>*>, boost::arg<1> > >) (const boost::system::error_code&)’ remote_server  line 499, external location: /usr/include/boost/asio/basic_deadline_timer.hpp C/C++ Problem 
‘void (CClient::*)(boost::optional<boost::system::error_code>*, boost::system::error_code)’ is not a class, struct, or union type remote_server  line 69, external location: /usr/include/boost/bind/bind.hpp C/C++ Problem 
make: *** No rule to make target `all'.    C/C++ Problem 
make: *** [src/CClient.o] Error 1 remote_server   C/C++ Problem 
    required from ‘class boost::_bi::bind_t<boost::_bi::unspecified, void (CClient::*)(boost::optional<boost::system::error_code>*, boost::system::error_code), boost::_bi::list2<boost::_bi::value<boost::optional<boost::system::error_code>*>, boost::arg<1> > >’ remote_server  line 15, external location: /usr/include/boost/bind/bind_template.hpp C/C++ Problem 
    required from here CClient.cpp /remote_server/src line 93 C/C++ Problem 
+0

請格式化您的錯誤輸出,就像您將代碼與四個空格縮進一樣。這很難讀取輸出並使其變得更糟。 –

回答

4

又有怎樣

timer.async_wait(boost::bind(&CClient::setResult, this, &timer_result, _1)); 

setResult是成員函數,如果在CClient中使用async_wait,或者使用某種類型的對象CClient而不是this

+2

在這種情況下,值得一提的是,'this'必須是'CClient'類型。 –

+0

@LyubomirVasilev謝謝。糾正。 – ForEveR

+0

杜。你是對的。 – deinocheirus