2017-11-06 14 views
0

私はboost::property_tree:ptreeオブジェクト内の文字列からいくつかのデータを保存しようとしている:ブーストjson_parser警告C4715

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 

誰も私がこの問題を解決する手助けすることはできますか?

答えて

1

問題ありません。あなたのコードではなく、Boostと関係しています。必要に応じて、警告を無視したり、IDEで抑制したりすることができます。エラーはステートメントなしで技術的に完了できるPtree& new_treeです。ここでは、コードです:あなたが見ることができるように

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)があります。あなたのコンパイラはそれだけでそれを理解するのに十分なほど巧妙ではないので、あなたに警告します。この場合は、警告を無視することができます。

1

は、関数は間違いなく、この部分は値を返しません

 default: 
      BOOST_ASSERT(false); // must start with string, i.e. call new_value 

であるswitch 1のケースが含まれていますが、それは全く戻らない主な理由。