2017-12-18 254 views
0

我正在嘗試使用boost屬性樹編譯自定義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(); 
     } 
    }; 

這段代碼無法編譯。 輸出爲:/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))); ^

我使用升壓v1.49

我與其他電腦進行測試,並將其與版本編譯正確1.58

感謝您的幫助。

+1

什麼是'context'?什麼是'c.stack'? 'c.stack.back()'返回什麼?請創建一個[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)向我們展示。當然,請[閱讀如何提出好問題](http://stackoverflow.com/help/how-to-ask)。 –

+0

http://idownvotedbecau.se/beingunresponsive –

回答

0

這是您應該創建的SSCCE。我看不到你的problem¹,²:

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

打印

{ 
    "field1": "dlrow olleh" 
} 

¹除了你可能濫用加速性能作爲XML或JSON庫。 Boost 沒有 XML或JSON庫。

²是我知道你的樣品比較複雜。很可能你正在爲你的接口代碼編寫一個「通用」序列化程序。在我的水晶球中,我猜測你正在使用Boost Fusion改編的結構來處理嵌套的對象圖。這一切都是以前完成的。問題是,你需要提出你有的問題,否則誰都不會知道。

+0

順便說一句,我剛剛意識到這種變化是你的問題:https://stackoverflow.com/q/47213341/85371 – sehe