stl — C ++ std :: vector :: const_iterator проблема

Так что я относительно новичок в C ++, и у меня возникла проблема со следующим std :: vector :: 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 будет обычным итератором. Кто-нибудь знает, где я иду не так? Вероятно, это действительно простая проблема, но я не вижу ее сейчас.

0

Решение

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

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]