我有一个名为 Shape 的抽象基类,Circle 和 Rectangle 都是从中派生的,但是当我在 VS 2005 中执行以下代码时,我收到错误“调试断言失败”。同时我没有在任何类中重载 == 运算符
表达式:向量迭代器不可解引用,这是什么原因。
vector<Shape*> s1;
s1.push_back(new Circle(point(1,2),3));
s1.push_back(new Circle(point(4,3),5));
s1.push_back(new Rectangle(point(1,1),4,5));
vector<Shape*> s2(s1);
reverse(s1.begin(),s1.end());
(*find(s1.begin(),s1.end(),new Circle(point(1,2),3)))->move(point(10,20));
Simple :
- 查找失败,因为在比较 Shape * 的向量中找不到新创建的 Circle
- 失败的查找返回结束迭代器,该迭代器不可延迟,如调试断言捕获的那样
为了让它像你想要的那样工作,你确实需要比较 Shape,而不是 Shape*
正如其他答案中指出的,升压::ptr_向量是实现这一目标的简单方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)