2

以下简单程序无法用 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
..........

我做错了什么?

4

3 回答 3

1

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

于 2010-12-15T10:58:45.983 回答
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;
于 2011-07-04T09:01:06.067 回答
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 月,仍然开放并存在于当前版本中。

于 2013-07-02T12:13:51.963 回答