2014-04-02 11 views
5

Sto cercando di ottenere una sottostruttura da un boost::ptree utilizzando get_child come questo:Boost: come ottenere una sottostruttura da un albero di proprietà esistente?

ho:

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

e quando chiamo

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

il crash di funzione dopo il ritorno dicendo

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

Latta qualcuno mi aiuta con questo? Che cosa sto facendo di sbagliato?

risposta

5

Si sta restituendo un riferimento al locale. Quello non funzionerà. Leggi questo:

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

Fix:

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

Il risultato è stato un manifestition di Undefined Behaviour e potrebbe essere diverso in giorni diversi, compilatori, corre ...

+1

Grazie, ho trovato un altro modo [qui] (http://www.informit.com/articles/article.aspx?p=25033&seqNum=3) creando un puntatore sullo stack, ma la soluzione è migliore. –

Problemi correlati