Mit Suche nichts gefunden: Konstante Referenz auf ein Array zurückliefern
-
Wie gesagt ich bekomms nicht hin (und hab gerade schon die gesamte andere Arbeit erledigt die noch anstand), ich kann nicht weitermachen
Es wäre sehr nett wenn mir da eben jemand hilft.
-
Bei dem eindimensionalen Array hab ich folgendes versucht (vielleicht seht ihr ja was falsch ist?):
In der Klasse
inline const unsigned int* GetArray(){ return((&Array)[20]); };
Die Zuweisung
const unsigned int *array = Klasse->GetArray();
Die Verwendung:
for(int i=0; i<20; i++) cout<<array[i]<<endl;
Und hier stürzt das Programm schon bei i=0 ab.
-
class myClass { private: int array[10]; public: const int *getArray() { return static_cast<const int*>(array); } }; myClass inst; const int *array = inst.getArray();
beantwortet das deine frage?
-
Ja, vielen Dank. Aber es wirft eine neue Frage auf:
Ich weiß was static_cast macht, aber nicht wie ich dein Beispiel jetzt auf zweidimensionale Arrays übertrage:
Korbinian schrieb:
class myClass { private: int array[10][10]; public: const int *getArray() { // ??? } }; myClass inst; const int *array = inst.getArray();
Wenn du mir da noch hilfst geb ich für heute Ruh'
-
const int **getArray() { return static_cast<const int **>(array); } const int **array = inst.getArray();
doppelte sternchen, weils ein 2dimensionales array ist(alternativ: [][]) der cast wandelt den typ um. static cast sollte hier genügen (aber das wissen hier andere besser als ich :). für andere casts siehe faq.
-
Klappt noch nicht ganz, müssen die Indexe gleich groß sein?
inline const unsigned int** GetArray(){ return static_cast<const unsigned int**>(array); };
wobei array ein
unsigned int array[4][10];
ist.
**
'static_cast' : 'unsigned int [4][10]' kann nicht in 'const unsigned int ** ' konvertiert werden
**
-
hm
zugegeben, ich hab mein zeuch nicht kompiliert...
versuchs mal einfach mit einem sternchen statt zwei. sollte eigentlich auch gehen
-
Leider nicht
'static_cast' : 'unsigned int [4][10]' kann nicht in 'const unsigned int *' konvertiert werden
-
Korbinian schrieb:
doppelte sternchen, weils ein 2dimensionales array ist
Es gibt keine zweidimensionalen Arrays in C++, es gibt nur untereinander inkompatible Varianten, sie zu simulieren.
-
hm, dann fällt mir nur noch ein, ein 1dimensionales zu nehmen, und entsprechend die indexoperation selber vorzunehmen, á la [X*x + y]