2014-04-02 7 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?

फिक्स:

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

आपका परिणाम Undefined Behaviour के manifestition था और अलग अलग दिनों, compilers, चलाता है पर अलग अलग हो सकता है ...

+1

धन्यवाद, मैं पाया है एक और तरीका [यहां] (http://www.informit.com/articles/article.aspx?p=25033&seqNum=3) ढेर पर एक सूचक बनाकर, लेकिन आपका समाधान बेहतर है। –

संबंधित मुद्दे

 संबंधित मुद्दे