我有一个名为 Shape 的抽象基类,Circle 和 Rectangle 都派生自该基类,但是当我在 VS 2005 中执行以下代码时,出现调试断言失败的错误。同时我没有在任何类中重载 == 运算符
Expression:Vector iterator not dereferencable,这是什么原因。
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));
最佳答案
简单:
- 查找失败,因为在比较 Shape 的 vector 中找不到您新创建的 Circle *
- 失败的查找返回结束迭代器,该迭代器不可被 Debug 断言捕获
要让它按你想要的方式工作,你需要比较 Shape,而不是 Shape*
正如其他答案所指出的,boost::ptr_vector是实现这一目标的简单方法。
关于c++ - vector 迭代器不可解引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/301959/