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