2013-03-29 2 views
2

Я попытался превратить this boost-asio server в класс, и я получил эту ошибку, пытаясь ее скомпилировать,C++: ошибка BOOST-привязки: нет соответствующей функции для вызова функции bind (<неразрешенный перегруженный тип функции>, ...?

C:\Documents and Settings\tcpip_server\TCPIP_server.h||In member function 'void TCPIP_server::server(boost::asio::io_service&, short int)':| 
C:\Documents and Settings\tcpip_server\TCPIP_server.h|56|error: no matching function for call to 'bind(<unresolved overloaded function type>, boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >&)'| 
c:\program files\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\boost\bind\bind.hpp|1472|note: candidates are: boost::_bi::bind_t<boost::_bi::unspecified, F, typename boost::_bi::list_av_1<A1>::type> boost::bind(F, A1) [with F = void (TCPIP_server::*)(boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >), A1 = boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >]| 
c:\program files\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\boost\bind\bind.hpp|1728|note:     boost::_bi::bind_t<typename boost::_bi::dm_result<M T::*, A1>::type, boost::_mfi::dm<M, T>, typename boost::_bi::list_av_1<A1>::type> boost::bind(M T::*, A1) [with A1 = boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >, M = void(boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >), T = TCPIP_server]| 
||=== Build finished: 1 errors, 3 warnings ===| 

Я знаю, что я должен как-то бросили тип для функции session но нет никакой двусмысленности, так как только одна void функции существует. Я проверить this thread, но я до сих пор путаю ошибку. ЭРВО код .

основная.cpp

#include "TCPIP_server.h" 

int main() 
{ 

    return 0; 
} 

TCPIP_server.h

+0

Первым параметром 'session' является' TCPIP_server * ', а не' socket_ptr'. – chris

+0

Как сказал Крис, вы пытаетесь привязать к функции * member *, для которой требуется неявный параметр 'this'. Вот ссылка, которая может привести в правильном направлении: http://stackoverflow.com/a/2304211/368896 –

ответ

3

bind необходим экземпляр класса TCPIP_server «s, на которой вызывается метод session. Так что ваш код должен быть:

boost::bind(&TCPIP_server::session, this, sock) 

TCPIP_server:: является обязательным, чтобы быть полностью C++ 03 совместимы на всех платформах/компиляторов.

Смежные вопросы