Dynamisches Array



  • Gute Abend!

    Ich lerne gerade noch, also bitte um Nachsicht! 🙂

    Mein Thema ist: Dynamische Arrays.

    Ich bin etwas unschlüssig, bei der Erzeugung von dynamischen Arrays, besonders wenn Objekte die darin gespeichert werden sollen auch noch const sind.

    Bei meinen Übungsaufgaben ist folgendes gegeben:

    class Queue
    {
      public:
        Queue();
    
      private:
        Data **data;
        int counter;
    }
    
    Queue::Queue(int size) : counter(0) {
      data = new Data*[size];
    }
    

    Das bedeutet, ich habe ein Array mit Pointer/Zeiger, in dem ich Objekte vom Typ Data speichern kann, ist das richtig?

    Ausgehend von der Klasse oben steht weiter, das ich folgende Methode habe

    bool enqueue(const Data *element) {
      data[counter] = element;
      counter++;
    }
    

    Der compiler beschwert sich natürlich, wenn ich versuche das Element einzufügen. Auf der anderen Seite kann ich natürlich auch nicht **data konstant machen.

    Wie schaffe ich es, das ich ein konstantes Objekt in meine Queue einfügen kann?

    Danke für die Hilfe!

    Grüße,
    Alf



  • Alf1979 schrieb:

    Auf der anderen Seite kann ich natürlich auch nicht **data konstant machen.

    Warum?



  • Alf1979 schrieb:

    Wie schaffe ich es, das ich ein konstantes Objekt in meine Queue einfügen kann?

    Möglicherweise unterliegst du dem Mißverständnis, dass const Data* ein konstanter Zeiger ist. Dem ist nicht so! In der Tat ist der Typ dieses Ausdrucks ein nicht-konstanter Zeiger auf ein konstantes Data . Das bedeutet dass du den Zeiger durchaus in enqueue() zuweisen kannst, so wie du es derzeit machst. Ein simples const Data** in Zeile 7 sollte dein Problem also schon lösen.

    Kleine Übersicht:

    Data* : nicht konstanter Zeiger auf nicht-konstante Instanz -> Zeiger und Instanz veränderbar.
    const Data* bzw. Data const* (beide äquivalent): nicht-konstanter Zeiger auf konstante Instanz -> Zeiger veränderbar, Instanz nicht.
    const Data* const bzw. Data const* const : Zeiger und Instanz konstant.
    Data* const : Zeiger konstant, Instanz nicht.

    Gruss,
    Finnegan



  • Hallo und danke für die Antworten.

    Durch das const in Zeile 7 ergibt sich jetzt ein Problem in Zeile 12:

    invalid conversion from ‘Data**’ to ‘const Data**’ [-fpermissive]



  • Alf1979 schrieb:

    Hallo und danke für die Antworten.

    Durch das const in Zeile 7 ergibt sich jetzt ein Problem in Zeile 12:

    invalid conversion from ‘Data**’ to ‘const Data**’ [-fpermissive]

    Der Typ der Elemente des Pointer-Arrays, das du in Zeile 12 neu erstellst muss natürlich auch const Data* sein, also:

    data = new const Data*[size];

    Gruss,
    Finnegan


Anmelden zum Antworten