Rad Studio XE und vector.erase
-
Hallo Leute
Wie kann es sein, dass mein Rad Studio XE kein Vector.erase kennt?
Oder mache ich was falsch?std::vector<TImage*> ImgVector; .... if (OpenPictureDialog1->Execute()) { TImage *img = new TImage(Form1); img->Picture->LoadFromFile(OpenPictureDialog1->FileName); img->Left=0; img->Top=0; img->Width=img->Picture->Width; img->Height=img->Picture->Height; img->Stretch=true; img->Parent=Form1; ImgVector.push_back(img); .... ImgVector.erase(x); //erase gibt es nicht, sagt der Compiler?
Ich möchte also ein Element aus dem Vector löschen.
Würde mich über einen Tip freuen.
Danke
wNw
-
@wNw :
Das genaue "gibt es nicht" wäre interessant. Ist wahrscheinlich ein "gibt es nicht mit dem Parameter x".
Was ist x?
-
Der Compiler meckert, dass es kein ImgVector**.erase** gibt. Unabhängig von x. (x habe ich nur zum veranschaulichen genommen)
Aber danke für deine Antwort
-
@wNw sagte in Rad Studio XE und vector.erase:
Der Compiler meckert, dass
Niemand will wissen, ob du die indirekte Rede beherrschst. Fehlermeldung: Copy&Paste zusammen mit dem passenden Code. Zum veranschaulichen ist blödsinn.
-
[BCC32 Fehler] Editor.cpp(252): E2285 Keine Übereinstimmung für 'std::vector<TImage *,std::allocator<TImage *> >::erase(int)' gefunden
Der Code steht doch oben
-
@wNw sagte in Rad Studio XE und vector.erase:
erase(int)
int?
Ist halt doof, wenn man nicht den kompletten Code zeigt.
Und ich bezweifle, dass das die vollständige Fehlermeldung ist.
-
Ok,
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Game.h" #include "Editor.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm2 *Form2; std::vector<TImage*> ImgVector; //--------------------------------------------------------------------------- __fastcall TForm2::TForm2(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm2::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { switch (Key){ case 69 : //Editor öffnen (E- Taste) Form2->Close();//Editor schliessen WURDE ZUM TESTEN ÜBERGANGEN!!! break; case VK_ESCAPE : //Escape (Programm beenden) Key=0; //Kein "Ping"-Sound Application->Terminate(); break; } } //--------------------------------------------------------------------------- void __fastcall TForm2::FormPaint(TObject *Sender) { Top=0; Left=1921; } //--------------------------------------------------------------------------- void __fastcall TForm2::FormShow(TObject *Sender) { DisEnabelAllPicControls->Execute(); } //--------------------------------------------------------------------------- void __fastcall TForm2::bt_btn_AddPictureClick(TObject *Sender) { // Bilder hinzufügen if (OpenPictureDialog1->Execute()) { TImage *img = new TImage(Form1); img->Picture->LoadFromFile(OpenPictureDialog1->FileName); img->Left=0; img->Top=0; img->Width=img->Picture->Width; img->Height=img->Picture->Height; img->Stretch=true; img->Parent=Form1; ImgVector.push_back(img); lb_PictureList->AddItem(ExtractFileName(OpenPictureDialog1->FileName), NULL); lb_PictureList->ItemIndex=lb_PictureList->Count-1; EnableAllPicControls->Execute(); UpdatePicturePositionEdits->Execute(); } } //--------------------------------------------------------------------------- //*************************************************************************** //Manage Picture Controls : void __fastcall TForm2::bt_btn_PicRightClick(TObject *Sender) {// Ausgewältes Bild nach rechts verschieben ImgVector[lb_PictureList->ItemIndex]->Left++; UpdatePicturePositionEdits->Execute(); } //--------------------------------------------------------------------------- void __fastcall TForm2::bt_btn_PicLeftClick(TObject *Sender) {// Ausgewältes Bild nach links verschieben ImgVector[lb_PictureList->ItemIndex]->Left--; UpdatePicturePositionEdits->Execute(); } //--------------------------------------------------------------------------- void __fastcall TForm2::bt_btn_PicUpClick(TObject *Sender) {// Ausgewältes Bild nach oben verschieben ImgVector[lb_PictureList->ItemIndex]->Top--; UpdatePicturePositionEdits->Execute(); } //--------------------------------------------------------------------------- void __fastcall TForm2::bt_btn_PicDownClick(TObject *Sender) {// Ausgewältes Bild nach unten verschieben ImgVector[lb_PictureList->ItemIndex]->Top++; UpdatePicturePositionEdits->Execute(); } //--------------------------------------------------------------------------- void __fastcall TForm2::bt_btn_PicSizePlusClick(TObject *Sender) {//Bild vergrössern ImgVector[lb_PictureList->ItemIndex]->Width++; ScaleImageWidth->Execute(); ImgVector[lb_PictureList->ItemIndex]->Height=ImgVector[lb_PictureList->ItemIndex]->Picture->Height*PicFak; UpdatePicturePositionEdits->Execute(); } //--------------------------------------------------------------------------- void __fastcall TForm2::bt_btn_PicSizeMinusClick(TObject *Sender) {//Bild verkleinern ImgVector[lb_PictureList->ItemIndex]->Width--; ScaleImageWidth->Execute(); ImgVector[lb_PictureList->ItemIndex]->Height=ImgVector[lb_PictureList->ItemIndex]->Picture->Height*PicFak; UpdatePicturePositionEdits->Execute(); } //--------------------------------------------------------------------------- void __fastcall TForm2::ed_PicLeftChange(TObject *Sender) {//Links-Wert eingeben für ausgewäles Bild if (ed_PicLeft->Text != "") { ImgVector[lb_PictureList->ItemIndex]->Left=StrToInt(ed_PicLeft->Text); } } //--------------------------------------------------------------------------- void __fastcall TForm2::ed_PicTopChange(TObject *Sender) {//Top-Wert eingeben für ausgewäles Bild if (ed_PicTop->Text != "") { ImgVector[lb_PictureList->ItemIndex]->Top=StrToInt(ed_PicTop->Text); } } //--------------------------------------------------------------------------- void __fastcall TForm2::lb_PictureListClick(TObject *Sender) {//Wenn Bild-Auswahl angeklickt wird dann Werte in Edits übernehmen EnableAllPicControls->Execute(); UpdatePicturePositionEdits->Execute(); } //--------------------------------------------------------------------------- void __fastcall TForm2::ed_PicWidthKeyPress(TObject *Sender, wchar_t &Key) {//Werte aus ed_PicWidth übernehmen und Bildhöhe proportional skalieren if (Key == VK_RETURN) {//Enter muss gedrückt werden Key=0;//Kein "Ping"-Sound ImgVector[lb_PictureList->ItemIndex]->Width=StrToInt(ed_PicWidth->Text); ScaleImageWidth->Execute(); ImgVector[lb_PictureList->ItemIndex]->Height=ImgVector[lb_PictureList->ItemIndex]->Picture->Height*PicFak; UpdatePicturePositionEdits->Execute(); } } //--------------------------------------------------------------------------- void __fastcall TForm2::ed_PicHeightKeyPress(TObject *Sender, wchar_t &Key) {//Werte aus ed_PicHeight übernehmen und Bildbreite proportional skalieren if (Key == VK_RETURN) {//Enter muss gedrückt werden Key=0;//Kein "Ping"-Sound ImgVector[lb_PictureList->ItemIndex]->Height=StrToInt(ed_PicHeight->Text); ScaleImageHeight->Execute(); ImgVector[lb_PictureList->ItemIndex]->Width=ImgVector[lb_PictureList->ItemIndex]->Picture->Width*PicFak; UpdatePicturePositionEdits->Execute(); } } //--------------------------------------------------------------------------- void __fastcall TForm2::UpdatePicturePositionEditsExecute(TObject *Sender) { ed_PicLeft->Text=IntToStr(ImgVector[lb_PictureList->ItemIndex]->Left); ed_PicTop->Text=IntToStr(ImgVector[lb_PictureList->ItemIndex]->Top); ed_PicWidth->Text=IntToStr(ImgVector[lb_PictureList->ItemIndex]->Width); ed_PicHeight->Text=IntToStr(ImgVector[lb_PictureList->ItemIndex]->Height); } //--------------------------------------------------------------------------- void __fastcall TForm2::ScaleImageWidthExecute(TObject *Sender) { ImageWidth=ImgVector[lb_PictureList->ItemIndex]->Width; PicWidth=ImgVector[lb_PictureList->ItemIndex]->Picture->Width; PicFak=ImageWidth/PicWidth; } //--------------------------------------------------------------------------- void __fastcall TForm2::ScaleImageHeightExecute(TObject *Sender) { ImageHeight=ImgVector[lb_PictureList->ItemIndex]->Height; PicHeight=ImgVector[lb_PictureList->ItemIndex]->Picture->Height; PicFak=ImageHeight/PicHeight; } //--------------------------------------------------------------------------- void __fastcall TForm2::bt_btn_ResetPicSizeClick(TObject *Sender) { ImgVector[lb_PictureList->ItemIndex]->Width=ImgVector[lb_PictureList->ItemIndex]->Picture->Width; ImgVector[lb_PictureList->ItemIndex]->Height=ImgVector[lb_PictureList->ItemIndex]->Picture->Height; UpdatePicturePositionEdits->Execute(); } //--------------------------------------------------------------------------- void __fastcall TForm2::EnableAllPicControlsExecute(TObject *Sender) { ed_PicLeft->Enabled=true; ed_PicTop->Enabled=true; ed_PicWidth->Enabled=true; ed_PicHeight->Enabled=true; bt_btn_PicUp->Enabled=true; bt_btn_PicDown->Enabled=true; bt_btn_PicLeft->Enabled=true; bt_btn_PicRight->Enabled=true; bt_btn_PicSizePlus->Enabled=true; bt_btn_PicSizeMinus->Enabled=true; bt_btn_DelPicture->Enabled=true; bt_btn_ResetPicSize->Enabled=true; } void __fastcall TForm2::DisEnabelAllPicControlsExecute(TObject *Sender) { ed_PicLeft->Enabled=false; ed_PicTop->Enabled=false; ed_PicWidth->Enabled=false; ed_PicHeight->Enabled=false; bt_btn_PicUp->Enabled=false; bt_btn_PicDown->Enabled=false; bt_btn_PicLeft->Enabled=false; bt_btn_PicRight->Enabled=false; bt_btn_PicSizePlus->Enabled=false; bt_btn_PicSizeMinus->Enabled=false; bt_btn_DelPicture->Enabled=false; bt_btn_ResetPicSize->Enabled=false; } //--------------------------------------------------------------------------- //*************************************************************************** //End of Picture Control void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action) { ImgVector.clear();//Bin nicht sicher, ob die Bilder mitgelöscht werden } //--------------------------------------------------------------------------- void __fastcall TForm2::bt_btn_DelPictureClick(TObject *Sender) { lb_PictureList->Items->Delete(lb_PictureList->ItemIndex); DisEnabelAllPicControls->Execute(); ImgVector.erase(lb_PictureList->ItemIndex); } //---------------------------------------------------------------------------
Ganz unten
-
@manni66 sagte in Rad Studio XE und vector.erase:
int?
-
@Jockelx sagte in Rad Studio XE und vector.erase:
@wNw :
Was ist x?
@manni66 sagte in Rad Studio XE und vector.erase:
@wNw sagte in Rad Studio XE und vector.erase:
erase(int)
int?
-
Das Problem ist doch, dass der Compiler kein vector.erase kennt.
Vergiss das int. Da ist alles in int.
-
Es gibt ja auch kein vector::erase mit
int
als Parameter.PS. Und warum ist
ImgVector
global?Und das Gegenteil von
enable
istdisable
(nichtDisEnabel
)...
-
@wNw sagte in Rad Studio XE und vector.erase:
Das Problem ist doch, dass der Compiler kein vector.erase kennt.
NEIN
-
Klingelt es endlich?
Und schomal der Link für die Folgefrage:
-
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.