In meinem Projekt ein VektorC++ benutzerdefiniertes Objekt aus dem Vektor entfernen: std :: remove_if ': keine passende überladene Funktion gefunden
std::vector<std::shared_ptr<MovingEntity>>gameObjects;
Was ich will, ist Elemente löschen, wenn sie die Kriterien erfüllen.
Methode Elemente zu löschen:
void GameWorld::catchBees()
{
auto q = std::remove_if(bees.begin(), bees.end(), beeToClose);
bees.erase(q);
}
Methode beeToClose:
bool GameWorld::beeToClose(const MovingEntity & bee)
{
std::shared_ptr<Beekeeper> keeper = std::static_pointer_cast<Beekeeper>(m_beekeeper);
if (bee.getConstPosition().distanceTo(m_beekeeper->getPosition()) > keeper->getCatchDistance())
{
return true;
}
return false;
}
Wenn ich versuche, den Code zu kompilieren bekomme ich einige Fehler, die ich versucht zu verstehen:
' GameWorld :: beeToClose ': Nicht-Standard-Syntax; Verwendung '&' einen Zeiger
Nicht sicher zu erstellen, warum diese Nachricht
'std :: remove_if' gegeben: keine passende überladene Funktion
finde ich nicht erklären BeeToClose richtig?
'q': kann nicht verwendet werden, bevor es SDLFramework initialisiert
q, weil nicht initialisiert:
std::remove_if(bees.begin(), bees.end(), beeToClose);
nicht richtig läuft?
Wie kann ich ein std :: shared_ptr korrekt aus einem Vektor korrekt entfernen, wenn einige Kriterien erfüllt sind?
wirklich entfernen, wenn nur 'Verwenden Sie [&]'. – Yakk
@Yakk Gut, haben Sie Ihren Weg :) Ich verlinkte die Lambda-Dokumentation, so dass das OP seine Lieblings-Capture auswählen kann. – Praetorian