【发布时间】:2012-04-13 17:18:33
【问题描述】:
我有一个 vector 持有指向抽象类型 Rock 的指针:
vector<Rock*> rocks;
如果我使用迭代器遍历向量,然后尝试通过迭代器访问对象(扩展 Rock 的非抽象类),我会在 XCode 4 中收到“EXC_BAD_ACCESS”错误:
vector<Rock*>::iterator rockIter;
for (rockIter = rocks.begin(); rockIter != rocks.end(); ++rockIter)
{
bullet.hit(*(*rockIter));
}
但是像正常循环一样是没问题的:
for (int i = 0; i < rocks.size(); i++)
{
bullet.hit(*rocks[i]);
}
函数hit() 看起来像:
bool Bullet::hit(Rock & rock)
我认为*(*rockIter) 和*rock[i] 会做同样的事情,但显然他们不会。有什么不同,如何像使用 *rock[i] 一样通过迭代器传递向量中对象的引用?
【问题讨论】:
-
值得一提的是,您需要使用智能指针向量而不是原始指针。它们让您的生活变得如此轻松。
标签: c++ loops stl vector iterator