2013-10-27 3 views
0

이 루프에서 나는 svg 태그의 자식에 toString() 메서드를 호출합니다. 그러나 매번 첫 번째 반복에서 세그먼트 분할 오류가 발생합니다. 이 이미지에서 볼 수 있듯이 TagG 2 차일을 가지고 있기 때문에예기치 않은 반복자 동작

std::list<Tag*> children; 

std::string TagSvg::toString() const{ 
    if(this->getChildren().empty()) return "<svg/>"; 

    std::string temp=""; 
    temp+="<svg>\n"; 

    for(std::list<Tag*>::const_iterator it=this->getChildren().begin(); it != this->getChildren().end(); ++it){ 
      temp+=(*it)->toString(); 
    } 

    temp+="</svg>\n"; 

    return temp; 
} 


std::list<Tag*> Tag::getChildren() const{ 
    return children; 
} 

, SVG 태그를 차일을 가지고, 그것은 첫 번째 반복에서 TagG에 toString()를 호출해야하지만, 심지어 당신이 볼 수있는 제대로 반복자를 설정하지 않습니다 dereferenced iterator에는 0 개의 자식 및 이상한 속성이 있습니다. 누군가 내가 잘못 본 것을 보여줄 수 있습니까? 감사!

enter image description here

+0

함수의 getChildren 코드를 붙여주십시오. 가치로 돌아 오나요? – 4pie0

+0

이 "temp + = (* it) -> toString();을 변경할 수 있습니까?" "temp + = it-> toString();"에 추가하십시오. 이? –

답변

2

아마 당신의 기능 getChildren 값에 의해 반환하고

std::list<Tag*>::const_iterator it=this->getChildren().begin(); 

it != this->getChildren().end(); 

포인트을 시작하고 의 다른 용기. 이 바로이 경우입니다 분명 당신의 편집에서, 그래서 변화 해주세요 :

std::list<Tag*>& Tag::getChildren() const{ 
    return children; 
} 

또는 그것을 좋아합니까 :

std::list<Tag*> children = this->getChildren(); //now you ensure you work on 
               //a single and the same container 
for(std::list<Tag*>::const_iterator it=children.begin(); 
             it != this->children.end(); ++it){ 
      temp+=(*it)->toString(); 
    } 
+0

글쎄 고마워! 그건 바보 같은 실수 였어. –