免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3975 | 回复: 13
打印 上一主题 下一主题

[C++] 一个C++模板的问题,VC6.0通过, GCC不能通过!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-20 15:16 |只看该作者 |倒序浏览
template<class T>
class CCommList  
{
public:
        CCommList();
        virtual ~CCommList();
        void Clear();
private:
        std::list<T*> infolist;
};
template<class T>
CCommList<T>::CCommList()
{
}
template<class T>
CCommList<T>::~CCommList()
{
}
template<class T>
void CCommList<T>::Clear()
{
        list<T*>::iterator info_iter = infolist.begin();
        for (; info_iter!=infolist.end(); info_iter++)
        {
                delete &*info_iter;
        }
        infolist.clear();
}


int main()
{
        return (0);
}

//====================================================
Compiling source file(s)...
Main.cpp
Main.cpp: In member function `void CCommList<T>::Clear()':
Main.cpp:128: error: expected `;' before "info_iter"
Main.cpp:129: error: `info_iter' undeclared (first use this function)
Main.cpp:129: error: (Each undeclared identifier is reported only once for each function it appears in.)

TTemplate.exe - 3 error(s), 0 warning(s)
//====================================================
MinGW developer studio (GCC3.4.2) 请教各位高手,是哪出了问题..谢谢!!
在VC++6.0下相同代码编译没有显示错误!!

论坛徽章:
0
2 [报告]
发表于 2006-03-20 15:30 |只看该作者
估计是没有加#include <list>,以及名字空间的修饰,我把你的代码改了一改就可以通过了



  1. #include <iostream>
  2. #include <list>

  3. template<class T>
  4. class CCommList  
  5. {
  6. public:
  7.         CCommList();
  8.         virtual ~CCommList();
  9.         void Clear();
  10. private:
  11.         std::list<T*> infolist;
  12. };
  13. template<class T>
  14. CCommList<T>::CCommList()
  15. {
  16. }
  17. template<class T>
  18. CCommList<T>::~CCommList()
  19. {
  20. }
  21. template<class T>
  22. void CCommList<T>::Clear()
  23. {
  24.         std::list<T*>::iterator info_iter = infolist.begin();
  25.         for (; info_iter!=infolist.end(); info_iter++)
  26.         {
  27.                 delete &*info_iter;
  28.         }
  29.         infolist.clear();
  30. }


  31. int main()
  32. {
  33.         return (0);
  34. }

复制代码

论坛徽章:
0
3 [报告]
发表于 2006-03-20 15:39 |只看该作者

回复 2楼 converse 的帖子

谢谢你的回复!我加了包含文件和名称空间,只是忘了贴上来.请问你用的什么编译器?

论坛徽章:
0
4 [报告]
发表于 2006-03-20 15:44 |只看该作者
gcc,除了用waring之外是可以编译过去的

论坛徽章:
0
5 [报告]
发表于 2006-03-20 15:45 |只看该作者

回复 2楼 converse 的帖子

怪了.....请问你用的什么版本?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2006-03-20 15:47 |只看该作者
》std::list<T*>::iterator info_iter = infolist.begin();
》typename std::list<T*>::iterator info_iter = infolist.begin();

论坛徽章:
0
7 [报告]
发表于 2006-03-20 15:49 |只看该作者
原帖由 lenovo 于 2006-3-20 15:47 发表
》std::list<T*>::iterator info_iter = infolist.begin();
》typename std::list<T*>::iterator info_iter = infolist.begin();


也可以不用在前面加typename的吧?我看到的STL源码里面这样设定iter的很多很多....

to 楼主: gcc 3.3.1

论坛徽章:
0
8 [报告]
发表于 2006-03-20 15:49 |只看该作者
哇..通过了...非常感谢二位.....能不能详细解释一下...

论坛徽章:
0
9 [报告]
发表于 2006-03-20 15:52 |只看该作者
原帖由 lyrix_z 于 2006-3-20 15:49 发表
哇..通过了...非常感谢二位.....能不能详细解释一下...


这一句:std::list<T*>::iterator info_iter = infolist.begin();
你原来是这么写的:list<T*>::iterator info_iter = infolist.begin();

回去看看名字空间吧

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
10 [报告]
发表于 2006-03-20 15:52 |只看该作者
其实我也不懂,看到报错了,
就加上试试。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP