Array wiedergeben lassen...
-
Was kann ich machen um einen kompletten Array von einer Methode mit return wieder zu geben um ihn dann in einer anderen Methode einer anderen Klasse benutzen zu können ?
Eine mögliche lösung soll sein auf die [0] stelle nen Pointer zu setzen, doch wie komme ich dann an z.b.[1] ?
-
http://www.c-plusplus.net/forum/viewtopic.php?t=39482
siehe HumeSikkins' Beitrag
-
Ok bei mir sieht der Array aber so aus:
//Klasse int bla[4] int* BLUBBER::BLUB() { return bla; } //Hauptprogramm int x[4]; x=BLUBBER.BLUB();
Da sagt der Compiler dann das er int nicht zu int[4] machen kann was ja auch logisch ist, aber wenn ich x[4] dann sagt er kann int nicht zu int*...
PS: Ja ich hab noch kein Plan von der Materie deswegen frag ich ja auch
-
Hallo,
x==x[0] also beides ein int.
Probier es mal mit:
(&x)=BLUBBER.BLUB();
aber genial ist das auch nicht, weil da nur ein Zeiger umgesetzt wird.
Am besten solltest du das Array als Parameter uebergeben und dann die Werte da rein kopieren.Gruß Entyl Sa
-
Hmm das mit (&x) funzt auch nicht... nur was meinst du mit x==x[0] ?
"Am besten solltest du das Array als Parameter uebergeben und dann die Werte da rein kopieren"
Was meinste damit ? Das ich jedes einzelne Array dingens einzeln uebergeben soll ? Das will ich gerade vermeiden ... weil ich dann jedesmal 7 Parameter uebergeben muesste ...
-
Das Array kannst du als Parameter so uebergeben:
void BLUBBER::BLUB(int a[]) { for(int i=0;i<4;i++)a[i]=bla[i]; } //Hauptprogramm int main(int argc, char *argv[]) { int x[4]; BLUBBER.BLUB(x); }
Das andere funzt net weil das ja auf dem Stack liegt, mein Fehler.
Gruß Entyl Sa
-
Mortal schrieb:
Ok bei mir sieht der Array aber so aus:
//Klasse int bla[4] int* BLUBBER::BLUB() { return bla; } //Hauptprogramm int x[4]; x=BLUBBER.BLUB();
Da sagt der Compiler dann das er int nicht zu int[4] machen kann was ja auch logisch ist, aber wenn ich x[4] dann sagt er kann int nicht zu int*...
PS: Ja ich hab noch kein Plan von der Materie deswegen frag ich ja auch
das geht deshalb nicht, weil x ein array ist, und du höchstens x[0], ...x[4] andere werte zuweisen kannst, aber x selbst ist konstant!
-
Wenn das so wäre, könnte man das Array nicht einfach in eine Struktur verpacken und dann zurückgeben. Viel Logik sehe ich hinter den C-Regeln für Arrays jedenfalls nicht.
Minibrainstorming:
// Lösung 1: Vielleicht bietet es sich ja sowieso an... struct Packesel { int values[4]; }; Packesel Blubber::blub() { Packesel result; Packesel.values[0] = 1; return Packesel; } ... // Lösung 2, siehe www.boost.org boost::array<int, 4> Blubber::blub() { boost::array<int, 4> result; result[1] = 2; return result; } // Lösung 3, einen vector nehmen, falls es ins Konzept passt... std::vector<int> Blubber::blub() { std::vector<int> result(4); result[2] = 3; } // Lösung 4, typsichere Übergabe per Referenz void Blubber::blub(int (&fillMe)[4]) { fillMe[3] = 4; }
-
Jo! Danke jetzt hab ich es hingekriegt.