0

だから私は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 が通常のイテレータであると予想される実行時エラーが発生します。私がどこで間違っているのか誰か知っていますか?おそらく非常に単純な問題ですが、私は今それを見ていません。

4

1 に答える 1

4

GetSubNodesベクトルを値で返しています。そのため、呼び出すたびにベクターの異なるコピーが取得されます。このコピーから取得している反復子は、コピーが破棄されると無効になります。これは、ステートメントの最後までに発生します。代わりに参照によってベクトルを返します。

const std::vector<shared_ptr<FSNode>> & FSNode::GetSubNodes()
///////////////////////////////////// ^
{
    return subNodes_;
}
于 2013-06-12T22:56:59.987 に答える