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