Objekte löschen



  • Hallihallo,

    ich schreibe grad an einer objektorientierten "Datenbank" im C++/C. Dabei geht es um einen CD Verleih, der gängige Funktionen wie Cd in Archiv einfügen, Cd aus Archiv löschen, Cd verleihen und CD rückgeben usw. erfüllen soll. Soweit habe ich alles hinbekommen, nur das CD löschen nicht. Kann mir vielleicht jemand verraten, wie ich das mache? Ich erstelle eine einzelne Cd mit:

    Verleih *ptr = new Verleih();
    new cd(ptr);

    Bei entfernen soll die ID der CD eingegeben werden und nach Bestätigung nur die einzelne CD gelöscht werden. Bitte erklärt mir wie das geht. Falls ihr den ganzen Code dafür braucht, sagt bitte bescheid, dann schicke ich ihn per Mail (um ihn hier reinzustellen ist er etwas komplex).

    Vielen Dank! Elli. 🙂



  • Hallo

    Speichere doch alle CDs in einer std::list und lösche dann einfach per erease();

    chrische



  • mh, damit kenn ich mich garnich aus, kannst du mir bitte an einem Beispiel erklären, wie das funktioniert?

    falls ich es über delete Kunde(ptr);

    probiere, erscheint bei mir der Fehler:

    E2157 Für das Löschen eines Objekts ist genau eine Umwandlung in einen Zeigeroperator erforderlich.

    Kann ich das irgendwie umgehen?

    Oder darf ich dir bitte vielleicht mal mein Programm schicken und du schaust mal, wie ich das machen kann? Das wär superlieb 🙂

    Danke, Elli.



  • ich hab's hinbekommen, so wie du er gesagt hast, super!

    Danke für deine Hilfe :p



  • ich hab's hinbekommen, so wie du er gesagt hast, super!

    Danke für deine Hilfe :p



  • dieElli schrieb:

    delete Kunde(ptr)

    Ist Kunde ein Zeiger auf ein Objekt? Und was ist in diesem Beispiel 'ptr'? Ich schätze, du benutzt es nur falsch.

    Mit delete löscht du das Objekt, auf das ein Zeiger zeigt:

    // erstellen
    Auto *audi = new Auto("A6");
    
    // mach was mit dem Audi
    // ...
    
    // löschen
    delete audi;
    


  • Naja, jetz funktionier es, hab aber noch eine Frage: Wenn es die CD, die gelöscht werden soll nicht gibt, soll der PC das anzeigen. Hab zum löschen die Funktion:

    eraser_c = new std::list<cd>();

    void Verleih::cdEntf()
    {
    using namespace std;
    int cd_nr;
    cout<<" Nummer der CD: "; cin>>cd_nr;
    list<cd>::iterator iter_Cd = cddaten->begin();
    while(iter_Cd != eraser_c->end() && iter_Cd->holeRegNr() != cd_nr) iter_Cd++;
    if(iter_Cd == eraser_c->end())
    {cout<<"\n Fehler: CD Nr. "<<cd_nr<<" existiert nicht!"; getch(); return;}

    eraser_c->erase(iter_Cd);
    }

    irgendwie hängt er sich aber fest, wenn ich eine falsche Nummer eingebe. Liegt das am:

    eraser_c->end()

    Danke! Elli



  • okay, mein Fehler, statt eraser_c muss da natürlich cddaten stehen 🤡

    ich denke das war dann! Lieben Dank 🙂

    die Elli


Anmelden zum Antworten