Rad Studio XE und vector.erase
-
@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.
-
@wNw sagte in Rad Studio XE und vector.erase:
Eine Frage habe ich noch:
Das Image muss ich aber selber aus dem RAM löschen oder übernimmt vector.erase das auch?
DankeOk, ich muss das Image mit delete löschen.
delete ImgVector[lb_PictureList->ItemIndex];
-
@wNw
Oder du verpackst deine Images in smart pointer wiestd::unique_ptr
oderstd::shared_ptr
. Aber Achtung:std::make_unique
undstd::make_shared
beißen sich mit der Delphi Speicherverwaltung.
Obwohl... du hast die XE Version von 2011? Da gibt´s noch keine C++ smart pointer, jedenfalls nicht für Embarcadero.
-
@DocShoe sagte in Rad Studio XE und vector.erase:
@wNw
Oder du verpackst deine Images in smart pointer wiestd::unique_ptr
oderstd::shared_ptr
. Aber Achtung:std::make_unique
undstd::make_shared
beißen sich mit der Delphi Speicherverwaltung.
Obwohl... du hast die XE Version von 2011? Da gibt´s noch keine C++ smart pointer, jedenfalls nicht für Embarcadero.Dann kann er ja auf boost ausweichen, das gab es da m.E. schon.
-
@Burkhi sagte in Rad Studio XE und vector.erase:
@DocShoe sagte in Rad Studio XE und vector.erase:
@wNw
Oder du verpackst deine Images in smart pointer wiestd::unique_ptr
oderstd::shared_ptr
. Aber Achtung:std::make_unique
undstd::make_shared
beißen sich mit der Delphi Speicherverwaltung.
Obwohl... du hast die XE Version von 2011? Da gibt´s noch keine C++ smart pointer, jedenfalls nicht für Embarcadero.Dann kann er ja auf boost ausweichen, das gab es da m.E. schon.
Boost mit dem RAD Studio zu selbst bauen traue ich dem TE (noch) nicht zu.
-
@DocShoe sagte in Rad Studio XE und vector.erase:
@Burkhi sagte in Rad Studio XE und vector.erase:
@DocShoe sagte in Rad Studio XE und vector.erase:
@wNw
Oder du verpackst deine Images in smart pointer wiestd::unique_ptr
oderstd::shared_ptr
. Aber Achtung:std::make_unique
undstd::make_shared
beißen sich mit der Delphi Speicherverwaltung.
Obwohl... du hast die XE Version von 2011? Da gibt´s noch keine C++ smart pointer, jedenfalls nicht für Embarcadero.Dann kann er ja auf boost ausweichen, das gab es da m.E. schon.
Boost mit dem RAD Studio zu selbst bauen traue ich dem TE (noch) nicht zu.
Für shared_ptr braucht man nur die Header. Das könnte noch klappen.
-
Danke nochmal an alle!