boost::property_tree::xml_writer_settings 的编译错误

Posted

技术标签:

【中文标题】boost::property_tree::xml_writer_settings 的编译错误【英文标题】:Compilation error with boost::property_tree::xml_writer_settings 【发布时间】:2015-03-31 14:13:42 【问题描述】:

为了使用boost::property_tree 漂亮地打印我的 XML 输出,我编写了以下代码:

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

int main()

    std::string filename = "test.xml";
    boost::property_tree::ptree pt;
    pt.put("some.path.value", "hello");

    boost::property_tree::xml_writer_settings<char> settings('\t', 1);
    write_xml(filename, pt, settings);

很遗憾,我遇到了这个错误,我找不到任何相关信息:

/usr/local/include/boost/property_tree/detail/xml_parser_writer_settings.hpp:38:19: error: type 'char' cannot be used prior to '::' because it has no members
    typedef typename Str::value_type Ch;
                     ^

有什么想法吗?

【问题讨论】:

This document 可以帮助你,但我不确定 这是我正在使用的标题 下次:请在问题中包含相关代码,这样我们就可以得到答案,而不是在 cmets 中画出“谢谢但是...” :) 是的,我现在就添加它 【参考方案1】:

我会使用辅助函数

std::ofstream file("test.xml");

boost::property_tree::ptree pt;    
pt.put("some.value", "test");

boost::property_tree::write_xml(
   file, pt,
   boost::property_tree::xml_writer_make_settings<std::string>('\t', 1));

【讨论】:

它可以工作,但我如何将它与 write_xml 一起使用?写write_xml(filename, pt, boost::property_tree::xml_writer_make_settings&lt;std::string&gt;('\t', 1))时出现以下错误:no matching function for call to 'write_xml @MartinDelille 您需要传递流,而不是文件名。文档很有耐心:) boost.org/doc/libs/1_57_0/doc/html/boost/property_tree/…(也很有趣,你截断了消息,因为现在我不得不猜测 filenamept 的类型是什么)。 &lt;char&gt; to &lt;std::string&gt; 更改时存在问题,它仅在您在 64 位上构建时有效,否则如果您在 32 位上构建并尝试使用 <:string> 那么您将得到上面描述的错误,但是如果您在 64 位上构建,您将不会收到错误 - 这假设您使用的是流而不是文件名 @serup 这没什么意义。看起来您可能将字符编码和构建架构混为一谈。 @sehe,我同意这没什么意义,但事实就是如此 - 试试看

以上是关于boost::property_tree::xml_writer_settings 的编译错误的主要内容,如果未能解决你的问题,请参考以下文章

再举几个例子