首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RapidXML:无法打印编译时错误

RapidXML:无法打印编译时错误
EN

Stack Overflow用户
提问于 2020-02-24 20:54:05
回答 1查看 459关注 0票数 2

我试图使用我的RapidXML应用程序中的C++库在控制台中打印XML数据。

我正在遵循RapidXML手册链接在这里,但是我得到了一个编译时错误。

这里是我的C++代码:

代码语言:javascript
复制
#include <iostream>
#include "rapidxml.hpp"
#include "rapidxml_utils.hpp"
#include "rapidxml_print.hpp"

int main() {
    rapidxml::file<> xmlFile("beerJournal.xml");
    rapidxml::xml_document<> doc;
    doc.parse<0>(xmlFile.data());

    std::cout << doc;

    return 0;
}

这里是错误:

代码语言:javascript
复制
rapidxml_print.hpp:115: error: ‘print_children’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
                 out = print_children(out, node, flags, indent);
                       ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~

rapidxml_print.hpp:169: ‘template<class OutIt, class Ch> OutIt rapidxml::internal::print_children(OutIt, const rapidxml::xml_node<Ch>*, int, int)’ declared here, later in the translation unit
         inline OutIt print_children(OutIt out, const xml_node<Ch> *node, int flags, int indent)
                      ^~~~~~~~~~~~~~

我已经尝试了手册中描述的另外两种RapidXML打印方法(上面的链接)。

我的设置:

  • Ubuntu 19 x64
  • G++ 8.3.0
  • RapidXML 1.13
  • Qt Creator IDE 4.11.0
  • Qt 5.14.0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-24 21:15:15

我以前也遇到过同样的问题。从那以后,在这就是答案中提出的解决方案一直在为我所有的GCC构建工作。

总结另一个答案的信息:归结为一个名字,查找GCC 4.7中的变化。解决方法包括创建一个名为rapidxml_ext.hpp的文件,其内容如下。然后在客户端应用程序/库中包括rapidxml_ext.hpp

rapidxml_ext.hpp

代码语言:javascript
复制
#pragma once

#include "rapidxml.hpp"

// Adding declarations to make it compatible with gcc 4.7 and greater
// See https://stackoverflow.com/a/55408678
namespace rapidxml {
    namespace internal {
        template <class OutIt, class Ch>
        inline OutIt print_children(OutIt out, const xml_node<Ch>* node, int flags, int indent);

        template <class OutIt, class Ch>
        inline OutIt print_attributes(OutIt out, const xml_node<Ch>* node, int flags);

        template <class OutIt, class Ch>
        inline OutIt print_data_node(OutIt out, const xml_node<Ch>* node, int flags, int indent);

        template <class OutIt, class Ch>
        inline OutIt print_cdata_node(OutIt out, const xml_node<Ch>* node, int flags, int indent);

        template <class OutIt, class Ch>
        inline OutIt print_element_node(OutIt out, const xml_node<Ch>* node, int flags, int indent);

        template <class OutIt, class Ch>
        inline OutIt print_declaration_node(OutIt out, const xml_node<Ch>* node, int flags, int indent);

        template <class OutIt, class Ch>
        inline OutIt print_comment_node(OutIt out, const xml_node<Ch>* node, int flags, int indent);

        template <class OutIt, class Ch>
        inline OutIt print_doctype_node(OutIt out, const xml_node<Ch>* node, int flags, int indent);

        template <class OutIt, class Ch>
        inline OutIt print_pi_node(OutIt out, const xml_node<Ch>* node, int flags, int indent);
    }
}

#include "rapidxml_print.hpp"
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60383777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档