2014-12-04 110 views
0

我试图在销毁它们时清除敌人的健康值,并且出现错误“没有重载函数的实例...”与参数列表匹配如果我有以下几点:从for循环中删除向量中的元素 - C++

upgradeHealth.erase(inner) 

这似乎只能接受这样的事情:

upgradeHealth.erase(upgradeHealth.begin()) 

我所需要的元素,在内部被擦除的位置,使之与刚刚摧毁了敌人的匹配。这里是for循环:

for (outer = 0; outer < bullets.size(); outer++)    
{ 
    for (inner = 0; inner < upgrades.size(); inner++)  
    { 
     if (upgrades[inner]->HitTest(bullets[outer])) 
     { 
      upgradeHealth[inner] -= 1; 
      bullets.erase(outer--); 
      multiplier += 0.01; 
      hasHit = true; 
      multiplierTime = 0; 
      cout << upgradeHealth[inner] << endl; 
      if (upgradeHealth[inner] == 0) 
       upgradeHealth.erase(inner), upgrades.erase(inner), score += 100 * multiplier; 
      break; 
     } 
    } 
} 
+1

尝试“upgradeHealth.begin()+内部”而不是 – Hacketo 2014-12-04 15:05:12

+0

我曾考虑过这样做,但掩盖了它,但它的工作原理非常感谢你! – StallMar 2014-12-04 15:15:57

回答

1

只有两个重载成员函数erasestd::vector

iterator erase(iterator position); 
iterator erase(iterator first, iterator last); 
0

类只能擦除使用std::vectorerase(...)方法的迭代器。

您可以检查this answer以了解如何从索引获取迭代器。虽然我会建议你重新考虑你的算法,这样你就不需要这样的转换。