Ok, so habe ich es geschafft, eine Methode zum Löschen von Runen in meinem Spiel zu schreiben, aber ich bekomme ständig diesen Fehler und ich weiß nicht warum. Irgendwelche Ideen, wie man mit dem Problem umgeht? Außerdem möchte ich diesen I-Iterator loswerden, aber dann weiß ich nicht, wie man für die Rakete richtig löscht und löscht.C++, Visual Studio 2015, Vektor Iterator nicht dereferenzierbar
{
int i = 0;
for (auto it = missle_vector.begin(); it != missle_vector.end(); ++it) {
score += missle_vector[i]->collision(i, missle_vector, enemy_vector, obstacle_vector, 1);
displayMissle(**it);
(*it)->moove(50, 0);
i++;
}
} //this is how i use it
int Missle::collision(unsigned int i, vector <Missle*> &missle_vector, vector <Enemy*> &enemy_vector,
vector <Obstacle*> &obstacle_vector, bool G)
{
int hit=0;
for (auto it=enemy_vector.begin(); it!=enemy_vector.end();)
{
double x, y;
x=(*it)->getX()-getX();
y=(*it)->getY()-getY();
if (x<64 && x>-151 && y<14 && y>-103)
{
delete missle_vector[i];
missle_vector.erase(missle_vector.begin() + i);
delete *it;
enemy_vector.erase(it);
hit++;
}
else
++it;
}
if(G){
for (auto it=obstacle_vector.begin(); it!=obstacle_vector.end(); ++it)
{
double x, y;
x=(*it)->getX()-getX();
y=(*it)->getY()-getY();
if (x<64 && x>-61 && y<14 && y>-61)
{
delete missle_vector[i];
missle_vector.erase(missle_vector.begin()+i);
}
}
}
if (getX()>1920)
{
delete missle_vector[i];
missle_vector.erase(missle_vector.begin()+i);
}
return hit;
} //method itself
Es ist ziemlich unklar, was dieser Code eigentlich * tun * soll. Zum Beispiel sehe ich, dass Sie "' missle_vector [i] '[sic]" in einer Schleife löschen. Aber "ich" ändert sich nicht. Ist das beabsichtigt? Ich weiß, dass der nachfolgende Aufruf zum Löschen das Element aus dem Vektor entfernt, aber es ist mir nicht klar, warum Sie den i-ten Index von diesem Vektor entfernen wollen. Was versuchst du zu machen? –
Ich habe die Art und Weise, wie ich die Methode verwende, bearbeitet. Dies sollte das Missverständnis klären. – Volterra
Erstens erklärt das nicht wirklich, was Sie versuchen zu tun. Zweitens zeigt das nur * mehr Probleme und Fehler *, da Sie versuchen, einen Iterator zu verwenden, der möglicherweise ungültig gemacht wurde. Grundsätzlich muss die Logik all dieser Systeme von Anfang an neu gedacht werden. –