Rad Studio XE und vector.erase
-
Ok, danke.
Dann frage ich mal so:
Wie würdet ihr in meinem Fall vorgehen?
Ich will einfach nur ein Element aus dem vector löschen können.
DankeÜberschneidung, Jockelx
-
ImgVector.erase(lImgVector.begin() + b_PictureList->ItemIndex);
-
@manni66 sagte in Rad Studio XE und vector.erase:
ImgVector.erase(lImgVector.begin() + b_PictureList->ItemIndex);
NeinDoch
-
Viellen Dank für eure Hilfe, aber anscheinend drücke ich mich falsch aus.
manni66 das bringt doch nichts und hat mit meinem Problem nichts zu tun.
Ich will wissen, warum der Compiler vector.erase nicht kennt obwohl es doch in den "Statuten" von c++ steht:
http://www.cplusplus.com/reference/vector/vector/erase/#include <vector>
Habe ich in der Header (.h) Datei.
-
@Jockelx: Warum nein? @wNw möchte das Element an Position
lb_PictureList->ItemIndex
löschen und das geht mit
dem von @manni66 gezeigten Code (bis auf, daß sich dort einl
verschoben hat ;- ):ImgVector.erase(ImgVector.begin() + lb_PictureList->ItemIndex);
-
@wNw sagte in Rad Studio XE und vector.erase:
manni66 das bringt doch nichts und hat mit meinem Problem nichts zu tun
Du kennst dich ja aus, da halt ich mich dann zurück ...
-
@Th69
Und wer aktualisiert die Indices der verbleibenden Items? Oder soll es beim zweiten löschen des letzten knallen bzw. den falschen löschen?
Wobei sich natürlich die Frage stellt, wozu das ItemIndex gut ist überhaupt gut ist.
-
@Th69 Danke.
Aber es gibt kein .erase bei ImgVector...
Es ist zum verzweifeln
-
@wNw gibt nicht = "keine Übereinstimmung"?
Die Fehlermeldung auf englisch ist "no matching overload found for std::vector<T>::erase".
Du musst verstehen die Fehlermeldungen richtig zu verstehen und was das in C++ bedeuetet.
Es gibt keine Überladung (<- lernen was das heißt, wenn unbekannt!) von der erase Funktionen die einen integer nimmt. Das heißt nicht dass es erase gar nicht gibt, das ist ja schmarn.
-
Muss ich da vielleicht was in den Compiler-Einstellungen verändern, damit .erase erkannt wird?
-
@wNw Auch wenn du ja eh alles besser weißt:
Hast du das@Th69 sagte in Rad Studio XE und vector.erase:
ImgVector.erase(ImgVector.begin() + lb_PictureList->ItemIndex);
ausprobiert? Das kompilert bei dir sicher auch.
Warum das semantisch (wahrscheinlich) nicht sinnvoll ist, hab ich schon gesagt, aber einen Kompilerfehler kriegst du nicht mehr.
-
Hier mal ein Screenshot:
http://www.imagebam.com/image/0a8e341347779150
-
Hast du meinen Code jetzt mal übernommen? Ansonsten zeige komplette Fehlermeldung!
@Jockelx: ItemIndex stellt den aktuell selektierten Eintrag in der ListBox dar (da muß nichts nachträglich korrigiert werden - außer evtl. vorher eine Abfrage auf "nichts ausgewählt" (
-1
)).
-
@Jockelx
Was soll ich sagen...
Du hast Recht!
Das compiliert ohne murren!
Ich verstehe aber nicht, warum? (siehe Screenshot)
Vielen Dank für deine Mühen und die Geduld!
wNw
-
@manni66 @Th69 Code überfliegen und dann Maul aufmachen ;-).
Hab es korrigiert.
-
void func(std::string const& bla){} void func(std::vector <std::string> const& v){} int main() { int a = 0; func(a); // <- hier }
Weil mir ein bisschen was daran liegt, dass du es verstehst.
Der code hier wirft die gleiche Art von Fehler, wie du ihn hast.
Warum?
-
Ich danke EUCH allen recht herzlich!
Das bringt mich ein ganzes Stück weiter!
Habe vorher nur selten vector benutzt.
Danke!!!
-
Eine Frage habe ich noch:
Das Image muss ich aber selber aus dem RAM löschen oder übernimmt vector.erase das auch?
Danke
-
@5cript sagte in Rad Studio XE und vector.erase:
Weil mir ein bisschen was daran liegt, dass du es verstehst.
Der code hier wirft die gleiche Art von Fehler, wie du ihn hast.
Warum?Wegen globaler Variable?
-
// 1: void func(std::string const& bla){} // 2: void func(std::vector <std::string> const& v){} // 3: void func(int param){} int main() { int a = 0; func(a); // <- hier }
1 kann er nicht aufrufen, weil 'a' ist kein string,
2 kann er nicht aurufen, weil 'a' ist kein vector
3 kann er aufrufen, weil a ist ein integer, und das kann der in die Funktion übergeben.Wenn 3 aber nicht existiert, findet er keine Überladung von func, die er aufrufen kann.
"Keine Übereinstimmung für 'func(int)' gefunden" wird der Fehler dann heißen.