2013-06-12 2 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