在jsoncpp中使用带有json值的if else语句

时间:2016-08-02 16:34:04

标签: c++ codeblocks jsoncpp

我试图在函数内部使用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]

1 个答案:

答案 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";
}