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 konstantesData
. Das bedeutet dass du den Zeiger durchaus inenqueue()
zuweisen kannst, so wie du es derzeit machst. Ein simplesconst 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