eXma » Diskutieren » Computer und Technik
Startseite - Veranstaltungen - Mitglieder - Suche
Vollständige Version anzeigen: C++ Funktion mit 2 Rückgabewerten?
marco
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.



Chris
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)
wicked
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.
mmarx
std::pair<int, int>.
stabilo
Die Frage ist doch eher: Was genau willst du machen und warum?
wicked
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?
drölf
kannst dir auch nen string aus mehreren rückgabewerten basteln und den danach zerlegen.

ist aber vermutlich höchst unprofessionell happy.gif
wicked
argh? biggrin.gif
stabilo
@wicked

Lesen kann ich selber. Mich interessiert aber, was die Funktion letztlich bezwecken soll. Anforderungsanalyse. Verstehste ja.
marco
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...
.henne
Ah fein. Noch ein paar mehr Informationen und du kriegst den komplett fertigen Code happy.gif
aktsizr
Zitat(marco @ 16 Apr 2008, 11:42)
da gabs doch das mit den referenzen...
*



thumbup.gif
wicked
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ß.
stth
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.