2013-06-12 82 views
0

所以我是比較新的C++和我有以下STD的問題::矢量::爲const_iterator:C++的std ::矢量::爲const_iterator問題

for (vector<shared_ptr<FSNode>>::const_iterator itr = curNode->GetSubNodes().begin() ; itr != curNode->GetSubNodes().end(); itr++) 
{ 
    shared_ptr<FSNode> nextNode = *itr; 
    GetXMLFromNode(nextNode, xmlDom, dirEle); 
} 

的GetSubNodes訪問

const std::vector<shared_ptr<FSNode>> FSNode::GetSubNodes() 
{ 
    return subNodes_; 
} 

基本上得到一個運行時錯誤,其中itr預計是一個常規的迭代器。有人知道我要去哪裏嗎?可能是一個非常簡單的問題,但我現在沒有看到它。

+1

您必須在* same *向量上調用'begin()'和'end()'! –

回答

4

GetSubNodes按值返回一個向量。所以你每次打電話時都會得到不同的矢量副本。當副本被銷燬時,從副本獲得的迭代器無效,發生在語句結束時。改爲通過引用返回矢量。

const std::vector<shared_ptr<FSNode>> & FSNode::GetSubNodes() 
/////////////////////////////////////^
{ 
    return subNodes_; 
} 
+0

是的,這是問題。感謝您及時的回覆! – evve