下面这个简单的程序不能用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
..........我做错了什么?
发布于 2010-12-15 18:58:46
这些错误是由rapidxml_iterators.hpp报头引起的。似乎常规的xml解析并不需要包含这个头文件。显然,其中定义的迭代器无论如何都不是真正可用的。它可能是仍在开发中的东西。另请参见here。
发布于 2011-07-04 17:01:06
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;发布于 2013-07-02 20:13:52
简单情况下的简单解决方案
您实际上并不需要rapidxml_iterators.hpp,但我们正在做一个健全的检查,对吧?
解决方案:只#include你实际需要的头。
这是一个普遍的规则。#include'ing一切就像吃得太多:它会让情况变得又胖又慢。
相比之下,只包含您需要的内容:
如果您确实需要rapidxml_iterators.hpp
在这一点上,问题可能已经解决。如果你真的需要rapidxml_iterators.hpp,它确实有很多错误(看起来这个错误就是一个Microsoftism)。该问题和其他问题已于2010年2月在http://sourceforge.net/p/rapidxml/bugs/10/上报告,并提出了与@user437634不同的建议解决方案,截至2013年7月,该解决方案仍在当前版本中开放并存在。
https://stackoverflow.com/questions/3830822
复制相似问题