Итерация по вектору вызывает ошибку, а стандартный цикл for - нет

у меня есть вектор , который содержит указатели на абстрактный тип Rock:

vector<Rock*> rocks;

Если я перебираю вектор с помощью итератора, а затем пытаюсь получить доступ к объекту (неабстрактный класс, который расширяет Rock) через итератор, я получаю ошибку «EXC_BAD_ACCESS» в XCode 4:

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]сделают то же самое, но явно не делают этого.В чем разница и как я могу передать ссылку на объект в векторе через итератор, как я делаю с * рок[i]?

5
задан templatetypedef 30 March 2012 в 01:45
поделиться