RapidXML print header has undefined methods

后端 未结 3 1067
终归单人心
终归单人心 2021-02-01 19:58

I\'ve been messing with using RapidXML on one of my projects. It was all going so well until I decided to use it for writing out xml. My code is more or less as follows:

相关标签:
3条回答
  • 2021-02-01 20:06

    And to eliminate the unused flags in the print_attributes funcion, remove the flags word in the prototype of that funcion

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

    and in its declaration

    template<class OutIt, class Ch>
    inline OutIt print_attributes(OutIt out, const xml_node<Ch> *node, int)
    {
    
    0 讨论(0)
  • 2021-02-01 20:15

    For those who come here looking for a solution to the same problem, I have a solution. After looking at http://gcc.gnu.org/gcc-4.7/porting_to.html under "Name lookup changes" (per n.m.'s suggestion) I changed the rapidxml_print.hpp header to have the following right before the declaration of the print_node function (in my file, I inserted this right after line 104):

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

    It now compiles nicely using GCC with a single warning since apparently int flags is unused in the print_attributes function.

    0 讨论(0)
  • 2021-02-01 20:17

    If you need to use gcc version greater than or equal to 4.7 and you are cloning the rapidxml repository during your build.

    Replace:

    #include "rapidxml.hpp"
    #include "rapidxml_print.hpp"
    

    With this:

    #include "rapidxml_ext.h"
    

    rapidxml_ext.h:

    #ifndef RAPIDXML_EXT_H_
    #define RAPIDXML_EXT_H_
    #include "rapidxml.hpp"
    /* Adding declarations to make it compatible with gcc 4.7 and greater */
    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"
    
    #endif /* RAPIDXML_EXT_H_ */
    
    0 讨论(0)
提交回复
热议问题