2017-11-06 6 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에서 경고를 무시하거나 무시할 수 있습니다. 오류 은 기술적으로 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)있다. 컴파일러는 그 자체만으로도 충분히 이해할 수있는 영리하지 못하므로 경고합니다. 이 경우 경고를 무시할 수 있습니다.

1

이 기능은 틀림없이이 부분은 값을 반환하지 않습니다

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

을 되 switch 하나의 경우가 있지만 전혀 반환하지 않습니다 주로 때문입니다.