2014-04-02 66 views
5

我試圖用get_child這樣獲得從boost::ptree子樹:Boost:如何從現有屬性樹中獲取子樹?

我:

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' 

Can有人幫助我呢?我究竟做錯了什麼?

回答

5

您正在返回對本地的引用。這是行不通的。閱讀:

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

修復:

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

你的結果的Undefined Behaviour一個manifestition並可以在不同的日子,編譯器,運行速度不同...

+1

謝謝,我已經找到另一種方式[這裏](http://www.informit.com/articles/article.aspx?p=25033&seqNum=3)通過在棧上創建一個指針,但是你的解決方案更好。 –