2016-02-26 131 views
0

我正在使用boost::asio构建一个通信类来封装客户端ftp连接。我想在类构造函数上创建套接字并在类生命期中使用它。使用boost :: asio :: ip :: tcp :: socket作为shared_ptr

由于插座需要io_service,这里是从来就迄今所做的:

,我需要保持开放的插座作为一个类的成员,为:

class Connect { 
    boost::asio::io_service ioService; 
    std::shared_ptr<boost::asio::ip::tcp::socket> currentSocket; 
    bool isConnected; 
} 

Connect::Connect() 
{ 
     boost::asio::ip::tcp::socket socket(ioService); 
     socket.connect(--params--); 

     if (error) 
      -- handle error -- 

     currentSocket = std::make_shared<boost::asio::ip::tcp::socket>(socket); <<=== ERROR HERE 

     isConnected = true; 
} 

Connect::~Connect() 
{ 
    currentSocket->disconnect(); 
} 

Connect::Read() 
{ 
    currentSocket->async_receive(...); 
} 

错误I'得到的是:

c:\boost_1_60\boost\asio\basic_socket.hpp(1513): error C2248: 'boost::asio::basic_io_object<IoObjectService>::basic_io_object' : cannot access private member declared in class 'boost::asio::basic_io_object<IoObjectService>' 

我正在使用VS2012。

这是在类生命期内存储套接字的正确方法吗? 为什么会发生这种错误?

帮助赞赏。

回答

2

此行试图复制套接字,这是不允许的。复制构造函数不公开。

为什么不简单地创建共享指针呢?

Connect::Connect() 
{ 
     currentSocket = std::make_shared<boost::asio::ip::tcp::socket>(ioService); 
     currentSocket->connect(--params--); 

     if (error) 
      -- handle error -- 

     isConnected = true; 
} 
+0

想好的解决方案。运行良好。谢谢!!! – Mendes

相关问题