2014-04-02 1 views
5

는이 같은 get_child 사용하여 boost::ptree에서 하위 트리를 얻기 위해 노력하고 있어요 :부스트 : 하위 트리를 기존 속성 트리에서 가져 오는 방법은 무엇입니까?

을 나는이 :

class ConfigFile 
{ 
    ptree pt; 
    ConfigFile(const string& name) 
    { 
    read_json(name, pt); 
    } 
    ptree& getSubTree(const string& path) 
    { 
    ptree spt = pt.get_child(path); 
    return spt; 
    } 
} 

을 나는 반환

말을 한 후

ConfigFile cf("myfile.json"); 
ptree pt = cf.getSubTree("path.to.child") 

기능의 충돌을 호출 할 때

terminate called after throwing an instance of 'std::length_error' 

캔 누군가 날 도와 줘? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

5

지역에 대한 참조가 반환됩니다. 그것은 작동하지 않습니다. 이 읽기 :

Can a local variable's memory be accessed outside its scope?

수정 : 귀하의 결과가 Undefined Behaviour의 manifestition이고 다른 날, 컴파일러, 실행에 다를 수

ptree getSubTree(const string& path) 
{ 
    return pt.get_child(path); 
} 

...

+1

감사합니다, 나는 발견했다 다른 방법으로 스택에 포인터를 만들어서 [http://www.informit.com/articles/article.aspx?p=25033&seqNum=3]하지만 해결책이 좋습니다. –