Проблема в том, что BOOST_FOREACH
является типом цикла , означает, что он будет выполнять тело для каждого элемента в соответствующем дереве.Так как при совпадении возвращается значение, будет действовать только первое.
Однако, если совпадений нет , тело 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;
}