在vc下可以编译通过的C++代码,可是拿到gcc下去编就失败

waterflier 2005-08-26 10:22:29
代码其实很简单
#include <list>
using namespace std;
template<typename T>
class mylist
{
public:
add(T* param)
{
m_list.pop_back(param);
}
protected:
list<T*> m_llist;
};

class test
{
public:
void foo() {}
};

void main()
{
mylist<test> ml;
ml.add(new test());
}


在VC下可正常通过,但是在gcc下被告知list接受的不能接受T*的模板参数?

到底怎么回事啊。。。是不是我哪里没有做好配置,还是gcc本身不支持如此简单的 C++特性?
...全文
222 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjf7888 2005-08-26
  • 打赏
  • 举报
回复
是不是stl库或者编译器版本的问题
waterflier 2005-08-26
  • 打赏
  • 举报
回复
都测试过了。没用。
ghtsao 2005-08-26
  • 打赏
  • 举报
回复
我觉得你可以使用typedef来看看将类型重新定义是否有用;

别外,有时候<>前后需要加空格;
waterflier 2005-08-26
  • 打赏
  • 举报
回复
我不是copy实际的代码,随手写了个例子反映问题,拼写错误在所难免阿。问题的核心是:
有一个class
template <typename T>
{
public:
void foo()
{
list<T*> iterator iter;
iter = m_list.begin();
}
list<T*> m_list

};

这个list的模板参数无法接受T*而只能接受T(通过模板参数T构建的新类型T*)
但是在VC下可以支持这个特性.

gcc的编译提示是 iterator is parsed as a non-type

这个是我要问的问题核心所在。

不好意思。发贴的时候动作太快了。
waterflier 2005-08-26
  • 打赏
  • 举报
回复
一样的了~ 用g++也测试过了。
clheee 2005-08-26
  • 打赏
  • 举报
回复
不是用g++编译c++程序么?
sharkhuang 2005-08-26
  • 打赏
  • 举报
回复
你用的gcc什么版本?vc是7吧
pankun 2005-08-26
  • 打赏
  • 举报
回复
以前我也碰到过类似问题的
waterflier 2005-08-26
  • 打赏
  • 举报
回复
我现在已经找到了答案

list<T*>::iterator ite
改成
typename list<T*>::iterator ite
就可以了.
其实这段代码是完全符合C++标准的.在vc下可以正常编译通过,估计这里的问题应该是gcc做模板具现的时机与在编译期确定某个型别是有效型别的时机产生了冲突导致.

希望能有能提供不需要修改源代码的解决方法.

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧