Hi, Ich programmiere gerade ein kleines Programm in C++ (Qt Creator). Ich habe eine Klasse "Field" und "Board". In Board habe ich ein Array static Field* vector[10][12] definiert. Aus der Klasse Board kann ich auch super auf die Objekte im Array zugreifen. So weit, so gut. Nun möchte ich das Array vector an eine andere Klasse übergeben: Auschnitt Klassendefinition: public: explicit Worker(Field* vector[10][12], QObject *parent = 0); private: Field* vector[10][12]; Ausschnitt Implementierung: Worker::Worker(Field* vector[10][12], QObject *parent) : QObject(parent) { this->vector = vector; } Fehlermeldung: Fehler:incompatible types in assignment of 'Field* (*)[12]' to 'Field [10][12]' Typ Casting klappt nicht. Hab auch schon mit [] anstatt [10] usw. rumprobiert, aber will nicht so richitg. Jemand ne Idee, was ich noch probieren kann ? Gruß N2
> this->vector = vector;
Das geht nicht, da du in C++ keine Arrays einander zuweisen kannst.
Wenn du die Inhalte des Arrays kopieren möchtest:
1 | memcpy(this->vector, vector, sizeof (this->vector)); |
Wenn this->vector ein Zeiger sein soll, der auf das übergebene Argument vector zeigt, musst du die Membervariable anders deklarieren:
1 | private:
|
2 | Field *(*vector)[12]; |
Die Zuweisung geht dann so, wie du es vorgehabt hast:
1 | this->vector = vector; |
Das geht, weil jetzt kein Array, sondern nur ein Zeiger zugewiesen wird.
Qt hat doch eigentlich recht schöne Containerklassen, warum nimmst du die nicht?
Hi Yalu, Vielen Dank für Deine Hilfe. Genau das wars. Ich will mit keiner Kopie arbeiten, genau den Pointer wollte ich haben. Ich dachte ein Array ist immer ein Pointer auf Pointer, wenn es kein primitiver Datentyp ist. Vielleicht wars bei Java so... Ich habs gerade nochmal probiert mit int Arrays, da gibs dann die Fehlermeldung dass Arrays einander nicht zugewiesen werden können. Hi Gast, Das Programm war mal ein nicht Qt-Programm und die Felder ein Struct-Vector. Der Einfachheit halber hab ichs dann fast so gelassen. Gruß N2
N2 schrieb: > Ich dachte ein Array ist immer ein Pointer auf Pointer, wenn es kein > primitiver Datentyp ist. Vielleicht wars bei Java so... Du musst dir zwei Dinge vor Augen halten: 1. Ein C-Array ist kein Pointer (wird aber in einigen Kontexten durch einen Pointer auf sein erstes Element repräsentiert). 2. Ein zweidimensionales Array in C ist in Wirklichkeit ein eindimensionales Array, dessen Elemente wiederum eindimensionale Arrays sind. Wenn du mehr darüber lesen möchtest, google einfach nach "array vs pointer" o.ä. Villeicht hilf auch das etwas weiter: Beitrag "Re: Ein Zeiger auf ein mehrdimensionales Feld"
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.