Nyc*_*aia 2 c++ xml printf rapidxml cout
我正在尝试使用 C++ 应用程序中的 RapidXML 库在控制台中打印 XML 文档数据。
\n\n我正在关注此处的 RapidXML 手册链接,但出现编译时错误。
\n\n这是我的 C++ 代码:
\n\n#include <iostream>\n#include "rapidxml.hpp"\n#include "rapidxml_utils.hpp"\n#include "rapidxml_print.hpp"\n\nint main() {\n rapidxml::file<> xmlFile("beerJournal.xml");\n rapidxml::xml_document<> doc;\n doc.parse<0>(xmlFile.data());\n\n std::cout << doc;\n\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这是错误:
\n\nrapidxml_print.hpp:115: error: \xe2\x80\x98print_children\xe2\x80\x99 was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]\n out = print_children(out, node, flags, indent);\n ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~\n\nrapidxml_print.hpp:169: \xe2\x80\x98template<class OutIt, class Ch> OutIt rapidxml::internal::print_children(OutIt, const rapidxml::xml_node<Ch>*, int, int)\xe2\x80\x99 declared here, later in the translation unit\n inline OutIt print_children(OutIt out, const xml_node<Ch> *node, int flags, int indent)\n ^~~~~~~~~~~~~~\nRun Code Online (Sandbox Code Playgroud)\n\n观察:我已经尝试了手册中描述的其他两种 RapidXML 打印方法(上面的链接)。
\n\n我的设置:
\n\n我过去也遇到过同样的问题。从那时起,这个 SO 答案中提出的解决方法对于我所有的 GCC 构建都非常有效。
总结其他答案的信息:它归结为 GCC 4.7 中进行的名称查找更改。解决方法包括创建一个rapidxml_ext.hpp以以下内容命名的文件。然后包含rapidxml_ext.hpp在您的客户端应用程序/库中。
rapidxml_ext.hpp
#pragma once
#include "rapidxml.hpp"
// Adding declarations to make it compatible with gcc 4.7 and greater
// See /sf/answers/3878607491/
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"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
746 次 |
| 最近记录: |