2012-12-19 41 views
0

我有一個名爲Info的類。將unique_ptr與矢量和地圖一起使用

我試着創建一個unique_ptr向量來存放這個類的列表。

該映射包含的鍵爲字符串,unique_ptr爲值。

但是當我嘗試檢索從地圖的價值,並試圖把它變成一個載體,形成列表,VS2010編譯器提供了一個錯誤: 錯誤C2664:「無效的std ::矢量< _Ty> ::的push_back( _Ty & &):性病::矢量< _Ty>」不能轉換參數1 '' 到 '的std ::的unique_ptr < _Ty> & &'

vector<unique_ptr<Info>> sInfo; 
QMap<QString,vector<unique_ptr<Info>>>::Iterator iterMap; 
for(iterMap = map_sInfo.begin(); iterMap != map_sInfo.end(); ++iterMap) 
{ 
    vector<unique_ptr<Info>>sValue = iterMap.value(); 
    sInfo.push_back((sValue)); //error C2664 
} 

如何讓 任何幫助,對此會非常感謝。

回答

0

由於錯誤信息提示,你想逼退整個S值容器(這是一個vector<unique_ptr<Info>>而不是unique_ptr<Info>的。正如你剛纔注意到,這是不是太順利。

你有。首先,你可以遍歷的sValuepush_back每個元素內容的幾個選項其次,你可以使用std ::副本中添加元素在一個聲明:

std::copy(sValue.begin(), sValue.end(), std::back_inserter(sInfo); 

第三個選項是使用std :: vector的insert函數一次性添加整個容器:

sInfo.insert(sInfo.end(), sValue.begin(), sValue.end()); 
+0

謝謝Timo,我確實選擇了第一個選項,它確實有效。但現在我遇到了QMap.error C2248問題:'std :: unique_ptr <_Ty> :: operator =':無法訪問在類'std :: unique_ptr中聲明的私有成員'<_Ty>' – Dilshad