Forum: PC-Programmierung "incompatible types"


von N2 (Gast)


Lesenswert?

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

von Yalu X. (yalu) (Moderator)


Lesenswert?

>   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.

von test (Gast)


Lesenswert?

Qt hat doch eigentlich recht schöne Containerklassen, warum nimmst du 
die nicht?

von N2 (Gast)


Lesenswert?

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

von Yalu X. (yalu) (Moderator)


Lesenswert?

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
Noch kein Account? Hier anmelden.