2013-06-12 3 views
0

Так что я относительно новым для C++ и у меня возникли проблемы с следующим станд :: вектор :: const_iterator:C++ станд :: вектор :: 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

Вы должны называть 'begin()' и 'end()' на * том же * векторе! –

ответ

4

GetSubNodes возвращает вектор по значению. Поэтому каждый раз, когда вы его называете, вы получаете другую копию вектора. Итератор, который вы получаете из этой копии, недействителен, когда копия уничтожена, что происходит в конце инструкции. Вместо этого верните вектор по ссылке.

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

Да, это была проблема. Спасибо за быстрый ответ! – evve

Смежные вопросы