我有一個vector
持有指針抽象類型Rock
:迭代通過向量原因錯誤,但標準的for循環不
vector<Rock*> rocks;
如果通過與迭代器的矢量,然後我循環試圖訪問對象通過迭代(即延伸Rock
一個非抽象類),I 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]
一樣?
值得一提的是,你會想使用智能指針的矢量而不是原始指針。他們讓你的生活變得更加輕鬆。 – chris 2012-03-30 02:39:10