我创建了一个读取JSON的函数以在OpenCV中设置屏幕,但是当它返回字符串时,会出现以下错误:
In member function ‘std::__cxx11::string JsonControl::GetJson(std::__cxx11::string)’: /home/developer/Documents/Develloper/Kamino_Project/kamino_vizualization/modules/drivenet/src/json/read_json.cpp:27:1: error: control reaches end of non-void function [-Werror=return-type] }
string JsonControl::GetJson(string getData)
{
read_json("../modules/src/json/resources.json", root);
BOOST_FOREACH (boost::property_tree::ptree::value_type &v, root.get_child(getData))
{
std::cout << v.second.data() << std::endl;
stringstream geek(v.second.data());
geek >> returnValue;
return returnValue;
}
}
string JsonControl::SetDataJson(string setData){
returnValue = GetJson(setData);
return returnValue;
}
非常感谢您。...
答案 0 :(得分:1)
麻烦的是BOOST_FOREACH
是 loop的一种类型,意味着它将为匹配的树中的每个项目执行主体。由于它会返回匹配值,因此只有第一个会被操作。
但是,如果没有匹配 ,BOOST_FOREACH
的主体将准确执行零次,因此循环中的return
永远不要执行。换句话说,它将从BOOST-FOREACH
中消失,此时将没有return
语句将值返回给调用方。
要解决此问题,您可以抛出异常,或者返回默认值,或者根据需要进行其他操作。例如,“默认值”选项可能类似于:
std::string JsonControl::GetJson(const std::string &key, const std::string &defaultVal) {
read_json("../modules/src/json/resources.json", root);
BOOST_FOREACH (boost::property_tree::ptree::value_type &v, root.get_child(getData)) {
stringstream geek(v.second.data());
geek >> returnValue;
return returnValue;
}
return defaultValue;
}