Mit Suche nichts gefunden: Konstante Referenz auf ein Array zurückliefern
-
Hallo,
wie wärs wenn du die Array's kapselst in eine Struktur oder Klasse.
Das würde eine Menge vereinfachen.struct Address { unsigned int arr[20][20]; } Array; const Address& GetAddress() { return Array; } int main(int argc, char* argv[]) { const Address& addr = GetAddress(); printf("%d\r\n", addr.arr[10][10]); return 0; }
-
Bei der Suche hab ich das auch schon gesehen, mir wäre aber lieber wenn es anders ginge.
-
fyi: arrays werden in c++ per reference übergeben. sprich du kannst einfach mit normalen zeigern arbeiten, womit du dir dann einiges an komplizierter syntax sparst. (falls dir das was hilft)
-
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]