Abstrakter Fehler.



  • Guten Morgen,
    Habe hier folgendes Problem

    im header eine Struktur
    und einen Vector dieser Struktur

    struct cell
            {
                TPanel *panel;    //Dieses Panel ist Parent von
                TRichEdit *rEdit; //       diesem
                TEdit *edit;      //       diesem
                TButton *button;  //       diesem
                TLabel *label;    //   und diesem Control
            };
            vector<cell> cells;
    

    Wenn ich ein Element aus dem Vector löschen will, mache ich das folgendermaßen

    delete cells[i].rEdit;
            delete cells[i].edit;
            delete cells[i].button;
            delete cells[i].label;
            delete cells[i].panel;
            for(unsigned int x=i; x<cells.size()-1; x++){
                Application->ProcessMessages();
                cells[x] = cells[x+1];
            }
    
            Application->ProcessMessages();
            cells.resize(cells.size()-1);
    

    Ich denke eigentlich sollte es so gehen.
    Aber ich bekomme Fehlermeldungen wie
    'Abstrakter Fehler.'
    und
    'Zugriffsverletzung' bei...'

    Sieht jemand Fehler im Code?



  • Wenn ich mich nicht irre, muss panel als Parent die Form haben, welche dann wiederum das Zerstören übernimmt. Oder liege ich da falsch?

    Wenn nicht, dann kannst du den delete Aufruf weglassen.



  • Hallo

    - du solltest statt deinem verschieben und resize()- Aufruf zum Löschen eines Elementes aus einem vector vector::erase verwenden.
    - du soltest das Aufräumen der Komponenteninstanzen dem Destructor des structs cell überlassen, den du noch anlegen must. Analog kannst du auch den Konstruktor für das Erzeugen benutzen.
    - Wie hast du denn die Owner der Controls gesetzt? Denn die Eigenschaft Owner gibt an, welches andere Control für das Löschen eines Controls veranwortlich ist. Owner kann NULL sein, dann must du selber das löschen übernehmen. Parent gibt dagegen an, in welchem anderen WinControl das Control angezeigt werden soll.

    bis bald
    akari


Anmelden zum Antworten