【问题标题】:How i return a string in a function cpp我如何在函数 cpp 中返回字符串
【发布时间】:2018-09-27 14:42:28
【问题描述】:

我创建了一个读取 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 次会发生什么?你返回什么?
  • return returnValue; 移出BOOST_FOREACH 块,希望你已经在别处声明并初始化了returnValue
  • 谢谢,你们两个是对的。这是工作。我学会了

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


【解决方案1】:

问题在于BOOST_FOREACH 是一种循环, 意味着它将为树中匹配的每个项目执行主体。由于它在匹配时返回一个值,因此只会处理第一个值。

但是,如果有 no 匹配项,BOOST_FOREACH 的主体将恰好执行 0 次,因此循环中的 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;
}

【讨论】:

    猜你喜欢
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 2016-11-17
    相关资源
    最近更新 更多