编译错误提升属性树C

Compile error boost property tree c++

本文关键字:属性 错误 编译      更新时间:2023-10-16

我正在尝试使用自定义Linux的Boost属性树编译。我在文件上有一个错误JSON_PARSER_READ.HPP(行105)

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

我正在使用Boost V1.49

我使用其他PC测试,并使用版本1.58

正确编译

感谢您的帮助。

这是您应该创建的SSCCE。我看不到你的问题¹,²:

活在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"
}

Å除非您可能会滥用Boost属性为XML或JSON库。Boost 没有 XML或JSON库。

²是的,我知道您的样本更复杂。您很可能为接口代码编写"通用"序列化器。甚至在我的水晶球上更深,我可以猜想您正在使用Boost Fusion适应的结构来处理嵌套对象图。这一切都已经完成了。关键是,您需要提出您遇到的问题,或者没人会知道。

相关文章: