ArrayList wie in Java



  • Hallo zusammen,

    ich möchte gerne eine ArrayList nachprogrammieren (vgl. ArrayList in Java). Dazu habe ich folgendes bereits codiert:

    Item.cpp:

    #include <iostream>
    #include "Item.h"
    
    using namespace std;
    
    Item::Item(int _value)
    {
        value = _value;
        cout << "Objekt mit dem Wert " << this->value << " wird erstellt." << endl;
    }
    
    Item::~Item()
    {
        cout << "Objekt mit dem Wert " << this->value << " wird entfernt." << endl;
    }
    
    int Item::get_value()
    {
        return value;
    }
    
    void Item::set_next(Item &next)
    {
        int tmp = next;
        this->next = tmp;
    }
    
    Item Item::get_next()
    {
        return *next;   
    }
    

    List.cpp:

    #include <iostream>
    #include "List.h"
    #include "Item.h"
    
    using namespace std;
    
    List::List()
    {
        cout << "Eine neue List wird erstellt." << endl;
        this->size = 0;
        this->head = Item(0);
    }
    
    List::~List()
    {
        cout << "Eine List wird zerstört." << endl;
    }
    

    Für die Prototypen habe ich entsprechende Header Dateien, die ich bereits included habe. Meine Frage ist nun:
    Warum bekomme ich bei der Funktion Item::set_next() folgende Exception: "*Item.cpp:24:16: error: cannot convert 'Item' to 'int' in initialization int tmp = next;"?
    Ich weis mittlerweile, dass in C++ die Items im Speicher vorhanden sind und ich diese mittles Zeiger abrufen kann. Hierfür übergebe ich der Funktion set_next auch nur den Zeiger auf das Item (Der Zeiger müsste doch vom Typ int sein, oder?). Ich habe mir mal die Mühe gemacht, meine Idee zu skizzieren: Skizze.

    Ziel soll es sein, dass diese Liste genauso wie eine ArrayList in Java verwendet werden kann. Da ich dies auch nur zur Übung mache, will ich nichts vorgefertigest importieren, sondern verstehen, wie soetwas funktioniert.

    Viele Grüße aus dem Ruhrpott

    Tobias Billen

    PS.: Ich habe bereits google benutzt, um eine Lösungsidee zu finden und dabei auf dieses Forum gestoßen.



  • @tobias-billen sagte in ArrayList wie in Java:

    void Item::set_next(Item &next)
    {
        int tmp = next;
        this->next = tmp;
    }
    

    Wieso sollte next hier ein int sein, schließlich hast du doch den Parameter als Item & deklariert?
    Du solltest hier aber mit Zeigern arbeiten, d.h. richtig ist also entweder

    void Item::set_next(Item *next)
    {
        Item *tmp = next;
        this->next = tmp;
    }
    

    oder gleich

    void Item::set_next(Item *next)
    {
        this->next = next;
    }
    

    Und auch deine get_next() solltest du entsprechend abändern.

    PS: Eine (doppelt)verkettete Liste gibt es schon in der Standard-C++ Library: std::list
    Aber als Übungsprogramm kannst du natürlich schreiben, was du willst. ;- )



  • Eine ArrayList basiert auf einem Array. Es ist keine verkettete Liste. Es wäre übrigens sinnvoller, auch die Klassendefinition zu posten, nicht nur die Implementierung der Memberfunktionen.



  • @tobias-billen sagte in ArrayList wie in Java:

    Der Zeiger müsste doch vom Typ int sein, oder?

    Nein. Mir ist nicht wirklich klar, was du hier meinst, aber ich denke du hast Zeiger nicht verstanden. Du solltest dir das also in deinem Lernmaterial noch einmal ansehen.