以下简单程序无法使用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
..........
我做错了什么?
答案 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月仍然在当前版本中开放并出现。