Mit Suche nichts gefunden: Konstante Referenz auf ein Array zurückliefern
-
danke, problem 2 gelöst
inline const unsigned int* GetArray() { return(&Array1[30]); };
Funktioniert soweit auch, aber wie bekomme ich dann so eine Zuweisung hin:
unsigned int ArrayBla[30] = GetArray();
-
Gar nicht. Arrays kann man nicht zuweisen.
BTW ist das bei dir keine Zuweisung, sondern eine Initialisierung. Aber selbst die funktioniert bei Arrays nur mit Initialisierungsblöcken ({ 2, 5, 10 ... };)
-
*grübel* und wie kann ich dann
inline const unsigned int* GetArray() { return(&Array1[30]); };
an einen Pointer zuweisen?
unsigned int *array geht nicht, genau wie unsigned int *array[30]
-
versuchs mal mit "unsigned int **"
<edit>ups, dachte du gibst &Array2[30] zurück :)</edit>
-
Hallo,
es muss
const unsigned int* array = GetArray();
heissen.
mfg
v R
-
Ok danke soweit. Wie funktioniert das bei zweidimensionalen arrays? Wie man diese an eine Funktion übergibt weiß ich, aber nicht wie man eine Referenz auf sie bekommt.
unsigned int Array[20][20]; const unsigned int* GetAddress() { return((&Array)[20][20]); } int main() { const unsigned int *bla = GetAddress(); cout<<bla[0]<<endl; system("pause"); return(0); }
So gehts, aber ich will ja bla[0][5] sagen können, was aber verweigert wird:
"error C2109: Index benoetigt ein Feld oder einen Zeigertyp".
Sicher ist GetAdresse murks, aber ich weiß nicht wie das geht
-
So, es klappt gar nichts mehr. Ich bitte um eine kleine Musterlösung.
es gibt zwei Array:
unsigned int Array[20]; unsigned int ArrayZwei[20][20];
Diese Arrays sind in einer Klasse und weil sie nicht verändert werden dürfen will ich nur das eine konstante Referenz zurückgeliefert wird, also 2 Methoden und die erste liefert für Array eine konstante Referenz zurück, die zweite für ArrayZwei.
Dann soll es 2 Funktionen geben, die erste akzeptiert eine konstante Referenz auf ein unsigned int Array[20], die zweite auf ein unsigned int Array[20][20], so das ich in den Funktionen wieder mit den Arrays arbeiten kann (aber halt nur darauf zugreifen).
Ich packs nicht
-
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]