2013-03-20 18 views
0

我想創建一個連接結構,其中有一個concurrent_queue和一個連接指針。由於我有一個未知數量的連接,這個結構將被推回到一個向量中。結構中的concurrent_queue

的載體和結構:

 struct connection_struct { 
      concurrent_queue<string> messages_queue; 
      connection_ptr con; 
      connection_struct(concurrent_queue<string> queue) { 
       messages_queue = queue; 
      } 
     }; 

     std::vector<connection_struct> allConnections; 

這可以被編譯,但是當我創建了結構,它不能再編譯。我創建由結構:

   boost::thread_group message_workers; 
       concurrent_queue<string> message_queue(&message_workers); 

       connection_struct viewer(message_queue); 

編譯錯誤是巨大的,但我認爲這是相關的位:

In constructor ‘websocketpp::broadcast::handler<endpoint_type>::connection_struct::connection_struct(concurrent_queue<std::basic_string<char> >) [with endpoint_type = websocketpp::endpoint<websocketpp::role::server, websocketpp::socket::tls>]’: 
broadcast_handler.hpp:284:21: note: synthesized method ‘concurrent_queue<std::basic_string<char> >& concurrent_queue<std::basic_string<char> >::operator=(concurrent_queue<std::basic_string<char> >&)’ first required here 

任何線索我應該怎麼辦?謝謝!

+0

我敢肯定,這將有助於如果你粘貼了整個錯誤信息並告訴我們'concurrent_queue'來自哪裏。 – us2012 2013-03-20 15:50:06

+0

看起來'concurrent_queue'不是可分配的,但根據http://msdn.microsoft.com/en-us/library/ee355375.aspx,是複製可構造的。所以:'connection_struct(concurrent_queue const&queue):messages_queue(queue){}' – hmjd 2013-03-20 16:02:16

回答

0

首先,想想你是否實際上希望你concurrent_queue(而不是引用他們)的副本。一旦你確定你做,你可以嘗試以下方法(C++ 11,可與MS ::Concurrency和英特爾TBB那些concurrent_queue s的複製施工的):

connection_struct(const concurrent_queue<string> & queue) : message_queue(queue) {}