|
|
|
 15 Apr 2008, 18:15
|

4. Schein    
Punkte: 470
seit: 01.10.2003
|
Hallo Leute, wie kann ich es realisieren, dass ich bei einer Funktion 2 Rückgabewerte returnen kann? mit arrays geht sni so einfach und ich will es einfach... mag keine kanonen auf spatzen werfen, oder wie das heißt... wenn ich es so mache: CODE int* do_something(int* N, int k){ N[0]=k; N[1]=k+1; return N; } int main(void){ int test[2], N[2]; int k = 1; N[0]=0; N[1]=1; test = do_something(N,k); }
meckert der rum: main.cpp:280: error: incompatible types in assignment of ‘int*’ to ‘int [2]’ was kann ich machen, damit das klappt??? danke m.
|
|
|
|
|
 15 Apr 2008, 18:20
|

Straight Esh         
Punkte: 14030
seit: 01.10.2003
|
Eine Funktion kann keine zwei Rückgabewerte haben, sondern immer nur einen. Wie sollte man denn sonst eine Zuweisung der Rückgabewerte auf Variablen durchführen können? Wenn du partou zwei Werte brauchst, kannst du auch Pointer im Funktionsaufruf übergeben, dann modifizierst du die Variablen im globalen Kontext und nicht im lokalen Kontext. Dein Funktionsaufruf sollte auch den Array berücksichtigen, also CODE int* do_something(int N[], int k)
--------------------
bonum agere et bonum edere, sol delectans et matrona delectans (Verlängere dein Leben indem du hier und hier und hier und hier klickst!)
|
|
|
|
|
 15 Apr 2008, 18:56
|

No-Know-How     
Punkte: 631
seit: 27.04.2007
|
Wenn es konkret um 2 Werte geht muss man ja in C++ noch nicht mal mit Pointer arbeiten, sondern hat den Komfort und die Sicherheit der Referenzen (und nutzt den return-wert stattdessen üblicherweise zur statusrückgabe): CODE bool do_something(int & n1, int & n2, int k) { n1=k; n2=k+1;
return true; // alles jut }
int main(void) { int N[2] = {0, 1}; int k = 1;
bool ret = do_something(N[0], N[1], k);
return 0; }
Wenns um n Werte geht dann doch lieber eine Referenz auf std::vector<int> verwenden.
--------------------
|
|
|
|
|
 15 Apr 2008, 22:23
|

No-Know-How     
Punkte: 631
seit: 27.04.2007
|
Zitat(stabilo @ 15 Apr 2008, 20:08) Die Frage ist doch eher: Was genau willst du machen und warum? Zitat(marco @ 15 Apr 2008, 18:15) wie kann ich es realisieren, dass ich bei einer Funktion 2 Rückgabewerte returnen kann?
|
|
|
|
|
 16 Apr 2008, 11:42
|

4. Schein    
Punkte: 470
seit: 01.10.2003
|
Zitat(stabilo @ 16 Apr 2008, 07:59) @wicked Lesen kann ich selber. Mich interessiert aber, was die Funktion letztlich bezwecken soll. Anforderungsanalyse. Verstehste ja.  als ob du es verstehen würdest... ich will die windungszahl eines komplexen polynoms über einem kantenzug bestimmen... falls auf diesem kantenzug eine nullstelle liegt, so soll mir die zweite variable das angeben... aber ich hab da schon ne idee, wie ich es machen werde... da gabs doch das mit den referenzen... ich glaub das is jut...
|
|
|
|
|
 16 Apr 2008, 12:12
|

3. Schein   
Punkte: 200
seit: 15.12.2007
|
Ah fein. Noch ein paar mehr Informationen und du kriegst den komplett fertigen Code
|
|
|
|
|
 16 Apr 2008, 14:29
|

No-Know-How     
Punkte: 631
seit: 27.04.2007
|
Zitat(stabilo @ 16 Apr 2008, 07:59) Lesen kann ich selber. Mich interessiert aber, was die Funktion letztlich bezwecken soll. Anforderungsanalyse. Verstehste ja.
Mir gings darum das da alles erforderliche stand. Das ist nun mal kein Problem wo man die Hintergründe kennen muß.
|
|
|
|
|
 16 Apr 2008, 17:14
|

der vierkonsonantige         
Punkte: 3812
seit: 12.12.2003
|
Zitat(marco @ 15 Apr 2008, 18:15) CODE int* do_something(int* N, int k){ N[0]=k; N[1]=k+1; return N; } int main(void){ int test[2], N[2]; int k = 1; N[0]=0; N[1]=1; test = do_something(N,k); }
 das trifft das, was du machen wolltest am ehesten: das N auf der rechten Seite der Zuweisung ist nur da, damit der erste Array überhaupt nen Sinn hat  CODE void do_something(int N[], int ret[], int k) { ret[0]=N[0] + k; ret[1]=N[1] + k+1; }
int main(void){ int test[2], N[2]; int k = 1; N[0]=0; N[1]=1; do_something(N, test,k); }
der Fehler trat übrigens auf, weil du nen prnzipiell möglichen TypeCast vergessen hattest. Ist aber nicht so schlimm, es wär auch so Krachen gegangen, weil du ne Referenz auf den Stack geändert hättest mit der Zuweisung des anderen Arrays, das die Funktion zurückgegeben hat. Dieser Beitrag wurde von stth: 16 Apr 2008, 17:16 bearbeitet
--------------------
|
|
|
1 Nutzer liest/lesen dieses Thema (1 Gäste)
0 Mitglieder:
|