C++ Funktion soll pointer auf 2D array zuückgeben

vdrenzo

Cadet 1st Year
Registriert
Mai 2017
Beiträge
13
Hallo zusammen,

folgendes Problem:
ich habe eine Klasse Block.cpp und Block.h, die intern ein array enthält, und nun möchte ich aus einer Klasse MainMenuState.cpp und .h auf dieses Array zugreifen.

Ein block objekt wird in mainmenustate erzeugt und initialisiert, wobei auch mein array form[3][3] ensteht.
Danach möchte ich in MainMenuState die funktion block.getform() ausführen können die mir einen Pointer auf form returned.

Nach langem suchen und lesen, ist mir klar, dass ein array auch nur ein pointer auf das erste element ist.

Ich habe rausgefunden, dass es bei einer einfachen integer variable so funktionieren sollte:

int* Block::getform()
{
return &a;
}

und bei aufruf

int* b =getform();


Nun ist mein array ein 2D array....

geht das nun so:

int* Block::getform()
{
return &form;
}

oder so:
int* Block::getform()
{
return &form[0][0];
}

oder so:
int** Block::getform()
{
return &form[0];
}

Alle möglichkeiten irgendwo gelesen aber keine funktioniert für mich...

Bei Bedarf kann ich meinen ganzen quelltext hochladen...
 
Code:
class Block {
   int form[3][3];

   public: int (*getform())[3];
};


 int(*Block::getform(void))[3]
{
   return form;
}


{
   Block block;
   int (*b)[3] = block.getform();

}
 
wow es geht!

Vielen Dank auf jeden Fall!


Kannst du es auch etwas erklären, sodass es leichter für mich wird es zu reproduzieren?

Insbesondere die eckigen Klammern mit Zahl in der funktions definition finde ich ungewöhnlich:

int(*Block::getform(void))[3]
 
vdrenzo schrieb:
Insbesondere die eckigen Klammern mit Zahl in der funktions definition finde ich ungewöhnlich:

getform() ist eine Funktion ...
Block::getform(void)die zur Klasse Block gehört (keine Parameter)
*Block::getform(void)Funktion liefert einen Zeiger zurück -
(*Block::getform(void))[3]einen Zeiger auf einen Bereich von 3 Elementen, die ()-Klammern werden gebraucht, weil sonst die eckigen Klammern an der Funktion getform(void)[3] ein "Array von 3 Funktionen" bedeuten würden
int (*Block::getform(void))[3]und schließlich ist der zurückgegebene "3-Elemente-Block" vom Typ int.
 
Zurück
Oben