I'm trying to print the XML document data in the console using the RapidXML Library in my C++ application.
I'm following the RapidXML Manual link here, but I got a compile-time error.
Here is my C++ code:
#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;
}
Here is the error:
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)
^~~~~~~~~~~~~~
Obs.: I already tried the other two RapidXML print methods described in the manual (link above).
My setup:
- Ubuntu 19 x64
- G++ 8.3.0
- RapidXML 1.13
- Qt Creator IDE 4.11.0
- Qt 5.14.0
I've come across the same issue in the past. The workaround presented in this SO answer has been working great for all of my GCC builds ever since.
To summarize the information of the other answer: It boils down to a name look up change made in GCC 4.7. The workaround consists of creating a file named
rapidxml_ext.hppwith the content below. Then includerapidxml_ext.hppin your client application/library.rapidxml_ext.hpp