2016-08-02 42 views
-2

我试图在使用jsoncpp做一些类似的操作,该函数将json值作为字符串返回。在jsoncpp中使用带有json值的if语句

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(); 
} 

我能够成功运行的JSON值例如:外Json::Value my=root["data"]["date"];的if else语句(注释掉的代码),但是当我试图运行里面这些JSON值的if-else语句,如果statment它表明这个错误

警告:控制到达非void函数结束[-Wreturn型]

+1

*警告:控制达到非无效函数的结束[-Wreturn-type] *意味着你的函数有一个不返回的路径。你能通过一个实际的[mcve]吗? – NathanOliver

+1

当你退出if/else语句时,这种'my'不存在。尝试添加'的Json ::我的价值;''之前如果/ else',然后就'我=根[ “数据”] [ “文章”];'等 – DimChtz

回答

3

我想这不是你,你应该得到的错误,my没有定义或任何声明的唯一错误太。

那是因为你有很多变数my但每个定义只能在自己的范围内,并没有在函数范围内声明。由于没有这样的变量你,因为第一个错误的跟进变量。

的解决方案很简单: - else if - 在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"; 
} 
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"; 
}