2013-03-29 26 views
2

我試圖把this boost-asio server到一個類和我這一個誤差試圖編譯,C++:BOOST綁定錯誤:用於調用「結合(<懸而未決重載函數類型>沒有匹配的函數,...

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但我仍然被錯誤混淆。繼承人的代碼。

main.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需要在其上調用方法sessionTCPIP_server所述的類的實例。所以,你的代碼應該是:

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

TCPIP_server::是強制要在所有平臺/編譯器完全C++ 03兼容。

相關問題