Может кто-нибудь сказать мне, почему это не компилируется? Я в основном скопировал это с примера Холкова (http://lists.boost.org/Archives/boost/2007/04/120339.php), еще в 2007 году, о reads () в сокетах с таймаутами:
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));
Ошибки, которые печатает 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
А как насчет
timer.async_wait(boost::bind(&CClient::setResult, this, &timer_result, _1));
setResult
является функцией-членом, если вы используете async_wait
в CClient
или используйте какой-нибудь объект типа CClient
вместо this
,
Других решений пока нет …