使用g ++在linux下编译rapidxml

时间:2010-09-30 13:13:12

标签: g++ compilation rapidxml

以下简单程序无法使用gcc 4.4.3

编译
#include "rapidxml.hpp"
#include "rapidxml_utils.hpp"
#include "rapidxml_print.hpp"
#include "rapidxml_iterators.hpp"

int main()
{
  return 0;
}

编译会产生以下错误:

rapidxml_iterators.hpp:21: error: expected nested-name-specifier
rapidxml_iterators.hpp:21: error: invalid declarator before ‘value_type’
rapidxml_iterators.hpp:22: error: expected nested-name-specifier
rapidxml_iterators.hpp:22: error: invalid declarator before ‘&’ token
..........

我做错了什么?

3 个答案:

答案 0 :(得分:1)

这些错误是由rapidxml_iterators.hpp标头引起的。似乎包括此标头对于常规xml解析不是必需的。显然,那里定义的迭代器无论如何都不是真正可用的。它可能仍在开发中。另请参阅here

答案 1 :(得分:1)

rapidxml_iterators.hpp有一些问题。您必须将其更改为:

typedef xml_node<Ch> value_type;
typedef xml_node<Ch> &reference;
typedef xml_node<Ch> *pointer;
typedef typename std::ptrdiff_t difference_type;
typedef typename std::bidirectional_iterator_tag iterator_category;

答案 2 :(得分:0)

简单案例的简单解决方案

您实际上并不需要rapidxml_iterators.hpp但是正在进行健全性检查,对吗?

解决方案:仅#include您实际需要的标头。

这是一般规则。 #include所有事情就像吃得太多:它会使情况变得肥胖而缓慢。

相比之下,只包括你需要的东西:

  • 让您了解实际的代码依赖性,
  • 有助于保护您免受命名空间污染和偶尔的名称冲突,有时甚至是可移植性问题,
  • 当你开始把那些应该分开的东西搞得一团糟时提醒你。

如果你真的需要rapidxml_iterators.hpp

此时,问题可能已经解决了。如果你真的需要rapidxml_iterators.hpp,那确实是错误的(看起来这个特殊错误是Microsoftism)。这个问题和其他问题于2010年2月在http://sourceforge.net/p/rapidxml/bugs/10/报告,其建议的解决方案与@ user437634不同,截至2013年7月仍然在当前版本中开放并出现。