2011-04-13 88 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) {}