所以我对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 :(得分:4)
GetSubNodes
按值返回向量。因此,每次调用它时,都会得到不同的向量副本。当副本被销毁时,您从此副本获取的迭代器无效,这在语句结束时发生。而是通过引用返回向量。
const std::vector<shared_ptr<FSNode>> & FSNode::GetSubNodes()
///////////////////////////////////// ^
{
return subNodes_;
}