我试图在函数内部使用jsoncpp
做类似的事情,该函数将json值作为字符串返回。
std::string some_function(std::string val){
.
.
.
if(val=="date")
{
Json::Value my=root["data"]["date"];
std::cout<<"Date";
}
else if(val=="id")
{
Json::Value my=root["data"]["id"];
std::cout<<"ID";
}
else if(val=="art")
{
Json::Value my=root["data"]["article"];
std::cout<<"Article";
}
else
{
return "Error";
}
//Json::Value my=root["data"]["date"]; //this works
return my.toStyledString();
}
我能够在if else语句之外成功运行json值示例:Json::Value my=root["data"]["date"];
(注释掉代码)但是当我试图在if-else-if语句中运行这些json值时,它会显示此错误< / p>
警告:控制到达非空函数的末尾[-Wreturn-type]
答案 0 :(得分:3)
我想这不是你得到的唯一错误,你应该得到my
未在任何地方定义或声明的错误。
那是因为你有很多变量my
,但每个变量只在它自己的范围内定义,而且没有在函数范围内声明。由于没有这样的变量,因为第一个错误,你会得到一个跟进变量。
解决方案非常简单:在if
- else if
- else
链之前声明一个变量,并仅使用普通赋值:
Json::Value my;
if(val=="date")
{
my=root["data"]["date"];
std::cout<<"Date";
}
...
在一个不相关的说明中,这不是我写这样一个函数的方式。我可能会做类似
的事情std::string some_function(std::string val)
{
static std::string const valid_values[] = { "date", "id", "art" };
if (std::any_of(std::begin(valid_values), std::end(valid_values),
[&](auto const& s)
{
return s == val;
}))
{
return root["data"][val];
}
return "Error";
}