G ++ 4.4编译错误,较低版本有效

时间:2010-02-25 12:35:19

标签: c++ ubuntu g++

我的程序是用C ++编写的,可以在Ubuntu 9.04上使用g ++ 4.3.4和Solaris OS with g ++ 3.4.3成功编译。现在我已将Ubuntu升级到版本9.10,将g ++升级到版本4.4.1。现在编译器调用STL中的错误。

/usr/include/c++/4.4/bits/stl_deque.h: In member function ‘void std::deque<_Tp, _Alloc>::swap(std::deque<_Tp, _Alloc>&)’:
In file included from /usr/include/c++/4.4/deque:65,
/usr/include/c++/4.4/bits/stl_deque.h:1404: error: ‘swap’ is not a member of ‘std’
/usr/include/c++/4.4/bits/stl_deque.h:1405: error: ‘swap’ is not a member of ‘std’
/usr/include/c++/4.4/bits/stl_deque.h:1406: error: ‘swap’ is not a member of ‘std’
/usr/include/c++/4.4/bits/stl_deque.h:1407: error: ‘swap’ is not a member of ‘std’

我不知道如何修复它,如果有可能stl包含bug。你能帮帮我吗?

非常感谢所有建议。

3 个答案:

答案 0 :(得分:7)

#include <algorithm>

答案 1 :(得分:2)

在旧版本的GCC中,如果您包含任何标准库标头,那么该标头通常会包含许多其他标头。正如其他人所提到的,在你的情况下,<algorithm>被包含在内。

标准不要求此行为。标准库的许多其他实现不会表现出这种行为,或者程度较低。这只是GCC开发人员很久以前做出的设计决定。看起来他们现在正在减少这种行为,使其更符合其他实现。这使您可以更好地控制包含的内容和不包含的内容。旧代码会破坏,但可以通过包含缺少的标题轻松修复。

答案 2 :(得分:0)

Apple论坛上的帖子建议

#include <algorithm>