2017-12-18 8 views
0

사용자 지정 Linux 용 향상 속성 트리를 사용하여 컴파일하려고합니다. 파일 json_parser_read.hpp (줄 105)에 오류가 있습니다.컴파일 오류 향상 속성 트리 C++

struct a_literal_val 
    { 
     context &c; 
     a_literal_val(context &c): c(c) { } 
     void operator()(It b, It e) const 
     { 
      BOOST_ASSERT(c.stack.size() >= 1); 
      c.stack.back()->push_back(std::make_pair(c.name, Str(b, e))); 
      c.name.clear(); 
      c.string.clear(); 
     } 
    }; 

이 코드는 컴파일되지 않습니다. 출력은 : 나는 부스트 v1.49

을 사용하고 /path/to/boost/property_tree/detail/json_parser_read.hpp:105: error: no matching function for call to 'boost::property_tree::basic_ptree<std::basic_string<char>, std::basic_string<char> >::push_back(std::pair<std::basic_string<char>, std::basic_string<char> >)' c.stack.back()->push_back(std::make_pair(c.name, Str(b, e))); ^

나는 다른 PC에서 테스트 그리고 버전으로 제대로 돕는 1.58

감사를 컴파일합니다.

+1

'컨텍스트'란 무엇입니까? 'c.stack'이란 무엇입니까? 'c.stack.back()'에 의해 반환되는 것은 무엇입니까? 우리에게 보여줄 수있는 [최소한의 완전하고 검증 가능한 예] (http://stackoverflow.com/help/mcve)를 만드십시오. 물론 [좋은 질문을하는 법을 읽어보십시오.] (http://stackoverflow.com/help/how-to-ask). –

+0

http://idownvotedbecau.se/beingunresponsive –

답변

0

작성해야하는 SSCCE는 다음과 같습니다.


{ 
    "field1": "dlrow olleh" 
} 
가 있다는 가능성이있는 XML로 부스트 재산권을 남용하고 제외 ¹

Live On Coliru

#include <boost/property_tree/ptree.hpp> 
#include <deque> 

using boost::property_tree::ptree; 

struct context { 
    std::string name, string; 
    std::deque<ptree *> stack; 
}; 

struct a_literal_val { 
    using Str = std::string; 

    context &c; 
    a_literal_val(context &c) : c(c) {} 

    template <typename It> 
    void operator()(It b, It e) const { 
     BOOST_ASSERT(c.stack.size() >= 1); 
     c.stack.back()->push_back(std::make_pair(c.name, ptree{Str(b, e)})); 
     c.name.clear(); 
     c.string.clear(); 
    } 
}; 

#include <boost/property_tree/json_parser.hpp> 
#include <iostream> 

int main() { 
    boost::property_tree::ptree pt; 
    context ctx { "field1", "", { &pt } }; 

    a_literal_val visitor {ctx}; 

    std::string const value = "hello world"; 
    visitor(value.rbegin(), value.rend()); // reverse, for fun 

    write_json(std::cout, pt); 
} 

인쇄 : 당신의 problem¹, ²를 볼 수 없습니다 또는 JSON 라이브러리. 부스트 에는 XML 또는 JSON 라이브러리가 없습니다.

² 예 귀하의 샘플이 더 복잡하다는 것을 알고 있습니다. 대부분의 경우 인터페이스 코드에 대한 "일반"직렬 변환기를 작성하고있을 가능성이 큽니다. 그리고 심지어 내 수정 구슬에서 더 깊게 중첩 된 객체 그래프를 처리하기 위해 Boost Fusion 적응 구조체를 사용하고 있다고 생각할 수 있습니다. 그것은 모두 끝났습니다. 요점은, 당신은 당신이 가진 문제를 제시 할 필요가 있거나, 아무도 알지 못할 것입니다.

+0

그건 그렇고, 나는이 변화가 당신 문제라고 깨달았습니다 : https://stackoverflow.com/q/47213341/85371 – sehe