2011-04-13 4 views
0

나는 boost.asio에 새로 왔습니다. 간단한 예를 시도 할 때 문제가 있습니다.boost.asio 테스트 문제

#include <boost/asio.hpp> 
#include "boost/bind.hpp" 
#include "boost/date_time/posix_time/posix_time_types.hpp" 

나는이 개인 변수가 필요합니다 : 내 헤더 파일에

내가 가진

boost::asio::ip::udp::socket socket_; 

내가 컴파일 할 때이 오류가 :의

error C2512: 'boost::asio::basic_datagram_socket<Protocol>' : no appropriate default constructor available 
     with 
     [ 
      Protocol=boost::asio::ip::udp 

답변

4

목록을 found here 인 경우 모든 UDP 소켓 생성자. 보시다시피 적어도 boost::asio::io_service 개체에 대한 참조를 제공해야합니다.

개인 변수 인 경우 클래스 생성자의 이니셜 라이저 목록에이 참조를 제공하십시오. 다음 컴파일됩니다 :

#include <boost/asio.hpp> 
class Socket 
{ 
    boost::asio::ip::udp::socket socket_; 
public: 
    Socket(boost::asio::io_service& ioserv) : socket_(ioserv) {} 
}; 
int main() 
{ 
    boost::asio::io_service io; 
    Socket s(io); 
} 
+0

부스트 왜 문서 :: 다음과 같이 설계되었습니다 ASIO이 있습니까? 나에게 이것은 매우 불편하다. – Simon

+0

@Simon 이름에 : "asio"는 비동기 I/O를 의미합니다. 이 라이브러리는 동기 전용 소켓 클래스를 가지고 있지 않으며 비동기 작업을 지원하기 위해 소켓에 io_service에 대한 참조가 필요합니다. 동기화 작업을 호출 할 계획이라 할지라도. – Cubbi

1

나는 boost :: asio 사용하고 비슷한 문제가있었습니다.

io_service 개체를 가져 와서 io_service로 socket_을 초기화하는 생성자를 만들어야합니다. 그래서 같이

:

tcp_connection::tcp_connection(boost::asio::io_service& io_service) : socket_(io_service) {}