我想創建一個垂直滾動的射手,當你按空間時會創建一個子彈,然後當子彈熄滅時子彈就會被銷燬。我跟蹤過矢量delcared爲vector<BULLET> bullets;
子彈的。當我試圖摧毀在屏幕外的任何子彈,我得到一噸的錯誤,如: c:\mingw\bin\..\lib\gcc\mingw32\4.7.0\include\c++\bits\stl_algobase.h|384| required from '_OI std::__copy_move_a(_II, _II, _OI) [with bool _IsMove = true; _II = BULLET*; _OI = BULLET*]'|
vector ::擦除導致奇怪的行爲
我的代碼看起來像這樣:
for(auto it = bullets.begin(); it != bullets.end();){
if(it->is_dead()){
it = bullets.erase(it);
}else{
it++;
}
}
這是令人沮喪的我的是,我有類似的循環,它會刪除需要保存的指針與載體將被刪除任何遊戲對象:
for(auto it = activeInstances.begin();
it != activeInstances.end();){
if((*it)->is_dead()){
it = activeInstances.erase(it);
}else{
it++;
}
}
這個工作得很好。
編輯:我不知道這是否有差別或沒有,但只是參考我補充說,在增加子彈的矢量相同的功能後出現部分:
if(key[SPACE] && reload == 0){
reload = reloadTime;
BULLET newBullet;
newBullet.init(x, y);
bullets.push_back(newBullet);
}
BULLET有一個移動構造函數嗎? – doctorlove
如果((*)) - > is_dead()){...你可能需要在if() - > is_dead()){ * it – Igor
'it->'可以訪問迭代器的對象,但是如果向量中的對象本身是點類型的,則必須通過'(* it) - >'去實現兩次:迭代器和迭代器持有的任何類型。 BULLET是指針類型嗎? – Pixelchemist