【发布时间】:2018-06-13 12:08:32
【问题描述】:
我想用 C++ 编写一个参数服务器,我可以在其中递归地将参数树转储到属性树中,然后将其写入 JSON 文件。 转储函数如下所示:
void Params::dump(string filename) {
// Create a root
pt::ptree root;
// Fill the root with parameters
mapToPt(curParams, root);
// Write to cout
pt::write_json(cout, root);
}
mapToPt 应该递归地遍历我的参数服务器的层次结构并在这样做时填充属性树:
void Params::mapToPt(boost::shared_ptr<Params> curParams, pt::ptree &root) {
// Fill current root with parameters from curParams ParameterMap
map<string, boost::shared_ptr<Param> >::iterator it;
for ( it = curParams->getParamMap().begin(); it != curParams-getParamMap().end(); it++ ) {
root.put(it->first, it->second->getValue());
cout << "Add Parameter: \n";
cout << "Parameter name: " << it->first << "\n";
cout << "Parameter value: " << it->second->getValue() << "\n";
}
// Recursively go through all children to do the same to them
if(curParams->hasChildren()) { //ERROR LINE
map<string, boost::shared_ptr<Params> >::iterator it;
for ( it = curParams->getChildren().begin(); it != curParams-getChildren().end(); it++ ) {
pt::ptree new_tree;
root.add_child(it->second->getName(), new_tree);
cout << "Add Child: \n";
cout << "Child name: " << it->second->getName() << "\n";
mapToPt(it->second, new_tree);
}
}
}
我的问题是,一旦我进入递归,错误就会发生在随机行,这不是错误的原因。 “basic_string::_M_construct null not valid”是错误消息。我相信我可能会访问已删除的内容,这可能是由于我遍历属性树子项的方式。 是我做错了还是有其他方法?
谢谢。
【问题讨论】:
-
如果
hasChildren()是错误行,那是如何实现的?
标签: c++ boost boost-propertytree