免费注册 查看新帖 |

Chinaunix

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

[C++] 一个c++迭代器初始化,赋值,比较的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-17 14:51 |只看该作者 |倒序浏览
本帖最后由 lishizelibin 于 2010-07-17 14:54 编辑
  1. void CAsDisplayObject::up(int entity)
  2. {
  3.     if (!entity)
  4.         return;

  5.     std::stack<dob_iterator> nodes;
  6.         nodes.push(0);
  7.     dob_iterator inode = m_nodes.begin();
  8.     dob_iterator isuper = 0;
  9.     dob_iterator istart = 0;
  10.     dob_iterator iend = 0;

  11.     for (; inode != m_nodes.end(); inode++)
  12.     {
  13.         int ent = (*inode)->m_entity;

  14.         if (!ent)
  15.             continue;

  16.         // store possible super node
  17.                 if ((nodes.top() == 0) ||
  18.             (*nodes.top())->m_entity != ent)
  19.         {
  20.             // new entity node started
  21.             if (nodes.top() != 0 &&
  22.                 ent == entity)
  23.             {
  24.                 isuper = nodes.top();
  25.                 istart = inode;
  26.             }

  27.             nodes.push(inode);
  28.         }
  29.         else
  30.         {
  31.             // entity node finished
  32.             if (ent == entity)
  33.             {
  34.                 iend = ++inode;
  35.                 inode--;
  36.             }
  37.             if (isuper != 0 &&
  38.                 (*isuper)->m_entity == ent)
  39.             {
  40.                 if (istart != 0 && iend != 0)
  41.                 {
  42.                     if (iend != inode)
  43.                         m_nodes.splice(inode, m_nodes, istart, iend);
  44.                 }
  45.                 isuper = 0;
  46.                                 istart = 0;
  47.                                 iend = 0;
  48.             }
  49.             nodes.pop();
  50.         }
  51.     }
  52. }
复制代码
问题:
error C2664: “std::stack<_Ty>::push”: 不能将参数 1 从“int”转换为“const std::list<_Ty>::_Iterator<_Secure_validation> &”
error C2440: “初始化”: 无法从“int”转换为“std::list<_Ty>::_Iterator<_Secure_validation>”
error C2678: 二进制“==”: 没有找到接受“std::list<_Ty>::_Iterator<_Secure_validation>”类型的左操作数的运算符(或没有可接受的转换)
。。。
运行环境:VS2005

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
2 [报告]
发表于 2010-07-17 16:40 |只看该作者
std::stack<dob_iterator> nodes;
nodes.push(0); // 这个0代表什么呢?

其实之后的 dob_iterator isuper = 0; 等等我也不知道你是什么意思?
估计是一种无聊的置零情节。即使是“置零情节”,这个“零”也只是一种泛指,并不是指“0”

论坛徽章:
0
3 [报告]
发表于 2010-07-17 16:43 |只看该作者
std::stack nodes;
nodes.push(0); // 这个0代表什么呢?

其实之后的 dob_iterator isuper = 0; 等等我 ...
bruceteen 发表于 2010-07-17 16:40



    这个在2003中可以通过,不过我觉的,不知道该怎么去初始化和比较,我再找找相关list操作,也麻烦楼上高手能指教一二,小弟不甚感激

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
4 [报告]
发表于 2010-07-17 16:54 |只看该作者
VC2003中可能 dob_iterator 就是一个指针类型,所以它可以做 = 0 操作
但我估计很少有库厂家会这么设计,所以你说的VC2005就把dob_iterator改为了一个类。

dob_iterator isuper; 本身就是有值的,不应该用 dob_iterator isuper = 0;
即使你想显式的赋初值,那也应该是 dob_iterator isuper = dob_iterator();

论坛徽章:
0
5 [报告]
发表于 2010-07-17 16:56 |只看该作者
回复 4# bruceteen


    你的建议很中肯,谢谢,我先研究一下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP