Как я возвращаю строку в функции cpp - PullRequest
0 голосов
/ 27 сентября 2018

Я создал функцию, которая читает 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;
}

Спасиботы очень любишь ....

1 Ответ

0 голосов
/ 22 октября 2018

Проблема в том, что 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;
}
...