_
toggle menu eXmatrikulationsamt.de
online: 652 gäste
Themen Layout: [Standard] · Linear · Outline Thema abonnieren | Thema versenden | Thema drucken
post 15 Apr 2008, 18:15
avatar
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.



ProfilPM
AntwortenZitierenTOP
post 15 Apr 2008, 18:20
avatar
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!)
ProfilPM
AntwortenZitierenTOP
post 15 Apr 2008, 18:56
avatar
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.


--------------------
Studentenclub Count Down
The future is already here - it is just unevenly distributed. William Gibson
ProfilPM
AntwortenZitierenTOP
post 15 Apr 2008, 19:23
avatar
Are you afraid?
********

Punkte: 1648
seit: 11.10.2007

std::pair<int, int>.


--------------------
In my talons, I shape clay, crafting life forms as I please.
Around me is a burgeoning empire of steel.
From my throne room, lines of power careen into the skies of Earth.
My whims will become lightning bolts that devastate the mounds of humanity.
Out of the chaos, they will run and whimper, praying for me to end their tedious anarchy.
I am drunk with this vision. God: the title suits me well.
ProfilPM
AntwortenZitierenTOP
post 15 Apr 2008, 20:08
avatar
Exmatrikulator
*********

Punkte: 2083
seit: 17.08.2006

Die Frage ist doch eher: Was genau willst du machen und warum?


--------------------
bild kann nicht angezeigt werden
ProfilPM
AntwortenZitierenTOP
post 15 Apr 2008, 22:23
avatar
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?
ProfilPM
AntwortenZitierenTOP
post 15 Apr 2008, 22:39
avatar
Drehrumbum der Runde
********

Punkte: 1995
seit: 07.03.2006

kannst dir auch nen string aus mehreren rückgabewerten basteln und den danach zerlegen.

ist aber vermutlich höchst unprofessionell happy.gif


--------------------
willkommen im Dreck!
die Pest
ProfilPM
AntwortenZitierenTOP
post 15 Apr 2008, 22:43
avatar
No-Know-How
*****

Punkte: 631
seit: 27.04.2007

argh? biggrin.gif
ProfilPM
AntwortenZitierenTOP
post 16 Apr 2008, 07:59
avatar
Exmatrikulator
*********

Punkte: 2083
seit: 17.08.2006

@wicked

Lesen kann ich selber. Mich interessiert aber, was die Funktion letztlich bezwecken soll. Anforderungsanalyse. Verstehste ja.
ProfilPM
AntwortenZitierenTOP
post 16 Apr 2008, 11:42
avatar
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...
ProfilPM
AntwortenZitierenTOP
post 16 Apr 2008, 12:12
avatar
3. Schein
***

Punkte: 200
seit: 15.12.2007

Ah fein. Noch ein paar mehr Informationen und du kriegst den komplett fertigen Code happy.gif
ProfilPM
AntwortenZitierenTOP
post 16 Apr 2008, 12:51

Avatar-Untertitel
*******

Punkte: 1459
seit: 03.04.2006

Zitat(marco @ 16 Apr 2008, 11:42)
da gabs doch das mit den referenzen...
*



thumbup.gif


--------------------
Gebrauchte, geprüfte SATA/IDE (500GB, 160GB, 120GB) Festplatten? --> https://www.exmatrikulationsamt.de/6058033
ProfilPM
AntwortenZitierenTOP
post 16 Apr 2008, 14:29
avatar
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ß.
ProfilPM
AntwortenZitierenTOP
post 16 Apr 2008, 17:14
avatar
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 wink.gif
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


--------------------
jeden tag einen dummen kommentar!
hab ich bei den fadfindern gelernt.
bild kann nicht angezeigt werden

bild kann nicht angezeigt werden bild kann nicht angezeigt werden bild kann nicht angezeigt werden bild kann nicht angezeigt werden
"if you have a hammer, every problem looks like a nail"
ProfilPM
AntwortenZitierenTOP
1 Nutzer liest/lesen dieses Thema (1 Gäste)
0 Mitglieder: