免费注册 查看新帖 |

Chinaunix

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

帮忙诊断下为什么用不了迭代器 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-09 16:06 |只看该作者 |倒序浏览
惭愧,泛型用的太少,请各位达人指点。

问题
==============================
当不适用迭代器做遍历时,工作正常。

[root@csg-dev1 _code]# g++ -o generic_test generic_test.cpp
[root@csg-dev1 _code]# ./generic_test
1
3

编译使用迭代器的那段,不通过

[root@csg-dev1 _code]# g++ -D__IT__ -o generic_test generic_test.cpp
generic_test.cpp: In member function `int GTest<RecType>:ump()':
generic_test.cpp:21: error: expected `;' before "p"
generic_test.cpp:22: error: `p' was not declared in this scope
generic_test.cpp: In member function `int GTest<RecType>:ump() [with RecType = int]':
generic_test.cpp:44:   instantiated from here
generic_test.cpp:21: error: dependent-name ` std::vector<RecType,std::allocator<_CharT> >::iterator' is parsed as a non-type, but instantiation yields a type
generic_test.cpp:21: note: say `typename  std::vector<RecType,std::allocator<_CharT> >::iterator' if a type is meant

Code
============================
  1 /* generic_test.cpp */
&nbsp;&nbsp;2 #include <iostream>
&nbsp;&nbsp;3 #include <vector>
&nbsp;&nbsp;4
&nbsp;&nbsp;5 using namespace std;
&nbsp;&nbsp;6
&nbsp;&nbsp;7 template <class RecType>
&nbsp;&nbsp;8 class GTest
&nbsp;&nbsp;9 {
&nbsp;10     public:
&nbsp;11         GTest(){};
&nbsp;12         virtual ~GTest(){};
&nbsp;13
&nbsp;14         void AddRec(RecType &r)
&nbsp;15         {
&nbsp;16             mV.push_back(r);
&nbsp;17         }
&nbsp;18
&nbsp;19         int Dump()
&nbsp;20         {
&nbsp;21 #ifdef __IT__
&nbsp;22             vector<RecType>::iterator p;
&nbsp;23             for (p=mV.begin(); p!=mV.end(); p++) {
&nbsp;24                 cout<<*p<<endl;
&nbsp;25             }
&nbsp;26 #else
&nbsp;27             int s=mV.size();
&nbsp;28             for (int i=0; i<s; i++)
&nbsp;29             {
&nbsp;30                 cout<<mV[i]<<endl;
&nbsp;31             }
&nbsp;32 #endif
&nbsp;33         }
&nbsp;34     private:
&nbsp;35         vector<RecType> mV;
&nbsp;36 };
&nbsp;37
&nbsp;38 int main()
&nbsp;39 {
&nbsp;40     GTest<int> gt;
&nbsp;41     int a=1;
&nbsp;42     gt.AddRec(a);
&nbsp;43     a=3;
&nbsp;44     gt.AddRec(a);
&nbsp;45     gt.Dump();
&nbsp;46     return 0;
&nbsp;47 }


==========================================

[ 本帖最后由 PinkOrient 于 2009-7-10 09:06 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-07-09 17:18 |只看该作者
尝试加个头文件 <iterator>

论坛徽章:
0
3 [报告]
发表于 2009-07-09 22:11 |只看该作者

回复 #2 berlin860 的帖子

多谢回复,我加上之后问题依旧。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
4 [报告]
发表于 2009-07-09 22:26 |只看该作者
typename vector<RecType>::iterator p;

顺便说下……  lz你这样的代码……
别人肯帮你编译一下已经不错了……
还要改掉斜体,找回那个[ i ]……
还要去掉前面的行号……

[ 本帖最后由 OwnWaterloo 于 2009-7-9 22:27 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2009-07-09 22:40 |只看该作者
原帖由 OwnWaterloo 于 2009-7-9 22:26 发表
typename vector::iterator p;

顺便说下……  lz你这样的代码……
别人肯帮你编译一下已经不错了……
还要改掉斜体,找回那个[ i ]……
还要去掉前面的行号……



不知lz是怎么编译通过的!
另外,这种错误自己先网上搜下:
http://tech.ddvip.com/2009-04/1239353205114385.html

论坛徽章:
0
6 [报告]
发表于 2009-07-09 23:28 |只看该作者

回复 #4 OwnWaterloo 的帖子

我也发现了这个问题,实际上我的代码是可以编译的,只是论坛把有些字符给转义了,
我用重新编辑看起来代码是正常的,但是一发表就缺胳膊少腿了。。。。知道怎么回事不?

难道我还吃饱了没事,把能编译过的代码改错了再发表上来啊。

[ 本帖最后由 PinkOrient 于 2009-7-9 23:31 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2009-07-09 23:40 |只看该作者

回复 #5 zpp71 的帖子

多谢指点,恕在下愚钝,还是没看明白,能不能在我的代码里面明示一下。

论坛徽章:
0
8 [报告]
发表于 2009-07-10 00:05 |只看该作者

回复 #1 PinkOrient 的帖子

恩,我悟了!!多谢zpp71

出错是因为gcc认不得vector<RecType>::iterator是个类型,前面加上typename告诉gcc这玩意是个类型别tmd jjyy,就顺溜了。

21 #ifdef __IT__
22            typename  vector<RecType>::iterator p;
23             for (p=mV.begin(); p!=mV.end(); p++) {
24                 cout<<*p<<endl;
25             }
26 #else

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
9 [报告]
发表于 2009-07-10 03:01 |只看该作者

回复 #8 PinkOrient 的帖子

我在4楼就给你说了是这个问题

也不知道你只看到说你不是没看到第1行呢, 还是故意当作没看见第1行。

你也知道那个叫转义符? 不会取消掉? 没上过bbs?

这你不会也就算了, 行号是什么意思?

你没贴在[ code ] [ / code ] 中CU还会给你加行号?  奇了怪了。
就不会找个纯文本的编辑器把格式先给去掉再复制进来?

这些跑论坛请教的家伙还一个二个跟大爷似的

论坛徽章:
0
10 [报告]
发表于 2009-07-10 09:01 |只看该作者
原帖由 OwnWaterloo 于 2009-7-10 03:01 发表
我在4楼就给你说了是这个问题

也不知道你只看到说你不是没看到第1行呢, 还是故意当作没看见第1行。

你也知道那个叫转义符? 不会取消掉? 没上过bbs?

这你不会也就算了, 行号是什么意思?

你没贴 ...





小弟确实没上过WEB版的BBS,不懂贴代码,刚才认真的研究了一下找到了贴代码的方法,已经修改。


关于行号是我加的。。。。去掉对UE来说小菜一碟,对VIM来说菜都不算,贴上行号只是为了方便别人看到出问题的行,

凡事有利就会有弊,我不能指望你用的也是vim,你也不能指望我就一定会在BBS上贴代码。

我问的这个问题对于有过这方面编程经验的人来说就是一句话的提示,就让我心怀感激。

非常感谢你的赐教包括本问题和如何上BBS,还让我找回了大学时候在bbs上和人斗嘴的感觉。

关于二大爷的问题,你可以认,但我不会给红包。

后记:

人性的弱点就是对别人指出你的缺点的时候非常敏感,却忽略了最初想要的答案。。。。。。

以后要克服。

[ 本帖最后由 PinkOrient 于 2009-7-10 09:23 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP