中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-01 20:46
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » [GCC][C++] 郁闷,GCC 的 ISO C++ 兼容性也太差了 查看 1,193 回复 2
楼 主 [GCC][C++] 郁闷,GCC 的 ISO C++ 兼容性也太差了 发表于 2006-06-12 16:20 ·  中国 上海 杨浦区 电信
高级用户
★★
积分 653
发帖 252
注册 2006-04-16 19:48
20年会员
UID 53939
状态 离线
以下代码居然无法编译通过:


template<class _MSGTYPE,
class _CONTAINER = std::vector<_MSGTYPE>,
class _COMP = std::less<typename _CONTAINER::value_type> >
class pri_msg_queue : public std::priority_queue<_MSGTYPE, _CONTAINER, _COMP>
{
public:
const value_type& front() const {return top();}
void pop_front() {pop();}
void push_back(const value_type& iMsg) {push(iMsg);}
};



报错说value_type、top()、pop() 和 push() 都没定义,其实这些都是基类中的公有成员。非要写成这样:


template<class _MSGTYPE,
class _CONTAINER = std::vector<_MSGTYPE>,
class _COMP = std::less<typename _CONTAINER::value_type> >
class pri_msg_queue : public std::priority_queue<_MSGTYPE, _CONTAINER, _COMP>
{
typedef std::priority_queue<_MSGTYPE, _CONTAINER, _COMP> _BASE;

public:
typedef typename _BASE::value_type value_type;

const value_type& front() const {return _BASE::top();}
void pop_front() {_BASE::pop();}
void push_back(const value_type& iMsg) {_BASE::push(iMsg);}
};


那还要基类和派生干吗?干脆把基类直接作为一个成员算了。
2 发表于 2006-06-12 20:35 ·  中国 山东 济南 移动
钻石会员
★★★★★
积分 10,051
发帖 3,040
注册 2002-11-11 00:00
23年会员
UID 223
性别 男
状态 离线
真得吗,如果是这样,那就不能叫做和标准的不兼容了,这简直是对C++的颠覆了。呵呵。

不过我刚才用MinGW试了一下,继承自基类模版的成员可以正常的在子类中使用,并不需要限定符啊。

我觉得在Windows下还是使用VC7比较好,编译出的代码的执行效率比GCC高出几倍。对标准的支持也不错。
简单就是美
3 发表于 2006-06-12 23:58 ·  中国 上海 杨浦区 电信
高级用户
★★
积分 653
发帖 252
注册 2006-04-16 19:48
20年会员
UID 53939
状态 离线
嗯,我用的也是 MinGW——GCC 3.4.2,确实有这个问题。

不过真实代码中的类是定义在一个名空间中的,而不是直接放在全局名空间里。但这也完全不应当成为出现这种现像的理由,呵呵。
论坛跳转: