2014-04-02 12 views
5

tôi đang cố gắng để có được một cây con từ một boost::ptree sử dụng get_child như thế này:Boost: Làm thế nào để có được một cây con tạo thành một cây tài sản hiện có?

tôi có:

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

và khi tôi gọi

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

các tai nạn chức năng sau khi trở về nói

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

Có thể ai đó giúp tôi với điều này? tôi đang làm gì sai?

Trả lời

5

Bạn đang trả lại tham chiếu đến địa phương. Điều đó sẽ không hoạt động. Đọc:

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

Fix:

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

Kết quả của bạn là một manifestition của Undefined Behaviour và có thể khác nhau vào những ngày khác nhau, trình biên dịch, chạy ...

+1

Cảm ơn, tôi đã tìm thấy một cách khác [ở đây] (http://www.informit.com/articles/article.aspx?p=25033&seqNum=3) bằng cách tạo một con trỏ trên ngăn xếp, nhưng giải pháp của bạn tốt hơn. –

Các vấn đề liên quan