[英]Boost json_parser warning C4715
我正在嘗試從boost::property_tree:ptree
對象中的字符串中保存一些數據:
const char* data = "Here are json params";
boost:property_tree:ptree tr;
std::stringstream ss;
ss << data;
//Here i get warning
boost::property_tree:ptree::read_json(ss, tr);
警告如下:
boost\property_tree\detail\json_parser\standard_callbacks.hpp(132): warning C4715: 'boost::property_tree::json_parser::detail::standard_callbacks<boost::property_tree::basic_ptree<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > >::new_tree' : not all control paths return a value
誰能幫我解決這個問題?
沒問題 它與Boost有關,與您的代碼無關。 您可以忽略該警告,也可以在IDE中取消顯示該警告。 錯誤是Ptree& new_tree
技術上講可以在沒有return
語句的情況下完成。 這是代碼:
Ptree& new_tree() {
if (stack.empty()) {
layer l = {leaf, &root};
stack.push_back(l);
return root;
}
layer& l = stack.back();
switch (l.k) {
case array: {
l.t->push_back(std::make_pair(string(), Ptree()));
layer nl = {leaf, & l.t->back().second};
stack.push_back(nl);
return *stack.back().t;
}
case object:
default:
BOOST_ASSERT(false); // must start with string, i.e. call new_value
case key: {
l.t->push_back(std::make_pair(key_buffer, Ptree()));
l.k = object;
layer nl = {leaf, &l.t->back().second};
stack.push_back(nl);
return *stack.back().t;
}
case leaf:
stack.pop_back();
return new_tree();
}
}
如您所見,在該開關中有一個default: BOOST_ASSERT(false)
,這意味着盡管該函數不返回任何內容,但它也會觸發調試器立即停止,因為發生了嚴重錯誤。 您的編譯器不夠聰明,無法自行解決,因此會警告您。 在這種情況下,您絕對可以忽略該警告。
該功能包含一個switch
,其中一種情況是
default:
BOOST_ASSERT(false); // must start with string, i.e. call new_value
可以說這部分不返回值,但是主要是因為它根本不返回。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.