2011-04-13 118 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

名單所有UDP套接字構造函數,如果found here。如您所見,您必須至少提供對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 2012-06-28 08:19:11

+0

@Simon它的名稱是:「asio」表示異步I/O。該庫沒有同步套接字類,並且爲了支持異步操作,套接字需要對io_service的引用。即使您只打算調用同步操作。 – Cubbi 2012-06-28 10:20:38

1

我已經使用boost :: asio和我有一個類似的問題。

您需要創建一個構造函數,它接受一個io_service對象並使用io_service初始化您的socket_。

像這樣:

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