2016-02-26 216 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

相關問題