首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用g++在linux下编译rapidxml

用g++在linux下编译rapidxml
EN

Stack Overflow用户
提问于 2010-09-30 21:13:12
回答 3查看 2K关注 0票数 2

下面这个简单的程序不能用gcc 4.4.3编译

代码语言:javascript
复制
#include "rapidxml.hpp"
#include "rapidxml_utils.hpp"
#include "rapidxml_print.hpp"
#include "rapidxml_iterators.hpp"

int main()
{
  return 0;
}

编译会产生以下错误:

代码语言:javascript
复制
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
..........

我做错了什么?

EN

回答 3

Stack Overflow用户

发布于 2010-12-15 18:58:46

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

票数 1
EN

Stack Overflow用户

发布于 2011-07-04 17:01:06

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

代码语言:javascript
复制
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;
票数 1
EN

Stack Overflow用户

发布于 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月,该解决方案仍在当前版本中开放并存在。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3830822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档