一个c++迭代器初始化,赋值,比较的问题
时间:2010-07-17
来源:互联网
- void CAsDisplayObject::up(int entity)
- {
- if (!entity)
- return;
-
- std::stack<dob_iterator> nodes;
- nodes.push(0);
- dob_iterator inode = m_nodes.begin();
- dob_iterator isuper = 0;
- dob_iterator istart = 0;
- dob_iterator iend = 0;
-
- for (; inode != m_nodes.end(); inode++)
- {
- int ent = (*inode)->m_entity;
-
- if (!ent)
- continue;
-
- // store possible super node
- if ((nodes.top() == 0) ||
- (*nodes.top())->m_entity != ent)
- {
- // new entity node started
- if (nodes.top() != 0 &&
- ent == entity)
- {
- isuper = nodes.top();
- istart = inode;
- }
-
- nodes.push(inode);
- }
- else
- {
- // entity node finished
- if (ent == entity)
- {
- iend = ++inode;
- inode--;
- }
- if (isuper != 0 &&
- (*isuper)->m_entity == ent)
- {
- if (istart != 0 && iend != 0)
- {
- if (iend != inode)
- m_nodes.splice(inode, m_nodes, istart, iend);
- }
- isuper = 0;
- istart = 0;
- iend = 0;
- }
- nodes.pop();
- }
- }
- }
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
作者: lishizelibin 发布时间: 2010-07-17
nodes.push(0); // 这个0代表什么呢?
其实之后的 dob_iterator isuper = 0; 等等我也不知道你是什么意思?
估计是一种无聊的置零情节。即使是“置零情节”,这个“零”也只是一种泛指,并不是指“0”
作者: bruceteen 发布时间: 2010-07-17
nodes.push(0); // 这个0代表什么呢?
其实之后的 dob_iterator isuper = 0; 等等我 ...
bruceteen 发表于 2010-07-17 16:40
这个在2003中可以通过,不过我觉的,不知道该怎么去初始化和比较,我再找找相关list操作,也麻烦楼上高手能指教一二,小弟不甚感激
作者: lishizelibin 发布时间: 2010-07-17
但我估计很少有库厂家会这么设计,所以你说的VC2005就把dob_iterator改为了一个类。
dob_iterator isuper; 本身就是有值的,不应该用 dob_iterator isuper = 0;
即使你想显式的赋初值,那也应该是 dob_iterator isuper = dob_iterator();
作者: bruceteen 发布时间: 2010-07-17
你的建议很中肯,谢谢,我先研究一下。
作者: lishizelibin 发布时间: 2010-07-17
作者: 123 发布时间: 2010-08-12
{
if (!entity)
return;
std::stack<dob_iterator> nodes;
//nodes.push(NULL);
dob_iterator inode = m_nodes.begin();
dob_iterator isuper = dob_iterator();
dob_iterator istart = dob_iterator();
dob_iterator iend= dob_iterator();
for (; inode != m_nodes.end(); inode++)
{
int ent = (*inode)->m_entity;
if (!ent)
continue;
// store possible super node
if ((nodes.top() == dob_iterator()) ||
(*nodes.top())->m_entity != ent)
{
// new entity node started
if (nodes.top() != dob_iterator() &&
ent == entity)
{
isuper = nodes.top();
istart = inode;
}
nodes.push(inode);
}
else
{
// entity node finished
if (ent == entity)
{
iend = ++inode;
inode--;
}
if (isuper != dob_iterator() &&
(*isuper)->m_entity == ent)
{
if (istart != dob_iterator() && iend != dob_iterator())
{
if (iend != inode)
m_nodes.splice(inode, m_nodes, istart, iend);
}
isuper = istart = iend = dob_iterator();
}
nodes.pop();
}
}
}
这样可以编译过,
作者: intellicad代码研究论坛 发布时间: 2010-08-12
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28