我如何在函数cpp中返回字符串

时间:2018-09-27 14:42:29

标签: c++ string function compiler-errors return-value

我创建了一个读取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 :(得分: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;
}