2014-04-02 14 views
5

Böyle get_child kullanarak boost::ptree bir alt ağacı almaya çalışıyorum:Yükseltme: Mevcut bir özellik ağacının alt ağacı nasıl oluşturulur?

Ben:

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; 
    } 
} 

ve ben dönüş

diyerek sonra

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

fonksiyon çöküyor çağırdığınızda

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

Birisi bana bununla yardım eder? Neyi yanlış yapıyorum?

cevap

5

Yerel referansa geri dönüyorsunuz. Bu işe yaramaz. bunu okuyun:

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

Fix: Sonucun Undefined Behaviour bir manifestition ve farklı günlerde, derleyici, ishal farklı olabilir

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

...

+1

sayesinde buldum Yığında bir işaretçi oluşturarak başka bir yol [burada] (http://www.informit.com/articles/article.aspx?p=25033&seqNum=3), ancak çözümünüz daha iyidir. –

İlgili konular