funktion, zwei rückgabewerte



  • Ich benötige eine Funktion, die ich gerne im Header stehen haben will, diese muss jedoch mindestens zwei Werte returnen können.

    Ist das überhaupt möglich, und wenn wie funktioniert das?



  • Du könntest sie z.B. zu einem struct zusammenfassen...



  • hmm, auf dem gebiet kenn ich mich nicht übermäßig viel aus.

    Gibt es da vielleicht ein kleines Tutorial, oder könntest du mir vielleicht ein Bespiel coden?



  • hallo, hier ein kleines beispiel:

    struct - struktur.

    struct MyStruct
    {
    int a;
    int b;
    };

    verwenden:

    MyStruct.a = 50; //zb.

    wenn du eine funktion willst:

    MyStruct MyStructFUNTION()
    {
    return MyStruct;
    }

    war auch ein kleines beispiel.

    zwischen:
    struct something
    {
    ...
    };

    und

    struct
    {
    ...
    } something; besteht ein unterschied:

    wenn du es wie das erste deklarierst, kannst du nur 1 object mit
    der struktur anlegen. mit dem 2. kannst du so viele wie du willst.

    gruß



  • Dachte da an so was in der Art:

    #include <iostream>
    
    using namespace std;
    
    struct complex
    {
      double re,im;
    };
    
    complex mult(complex z1, complex z2)
    {
    	complex z;
    	z.re=z1.re*z2.re-z1.im*z2.im;
    	z.im=z1.re*z2.im+z1.im*z2.re;
    	return z;
    }
    
    int main()
    {
      complex z1;
      z1.re=1;
      z1.im=2;
      complex z2; 
      z2.re=1;
      z2.im=-2;
      cout<<"("<<z1.re<<","<<z1.im<<")*("<<z2.re<<","<<z2.im<<")=("<<mult(z1,z2).re<<","<<mult(z1,z2).im<<")"<<endl;
    }
    

    Da könnten noch so einige Fehler drin sein 🙄

    <edit>
    Ja, ich weiß, daß wir hier im C++-Builder Unterforum sind :p
    </edit>



  • auch selber rumprobieren 🙂

    return &z; villeicht? oder so! 🙂



  • hallo,

    wie mein vorgänger gesagt hat könntest du eine struktur zurückgeben. was aber einfacher ist, du machst es nicht über die rückgabe sondern verwendest bei der parameterübergabe "call by referenz", das würde so aussehen:

    #include <iostream.h>
    #include <conio.h>
    
    //---------------------------------------------------------------------------
    
    void CallByRef(int& Val1, int& Val2)
    {
       Val1 = 45;
       Val2 = 12;
    }
    
    void main()
    {
       int Wert, Wert2;
       CallByRef(Wert, Wert2);
       cout << Wert << Wert2;
       getch();
    }
    

    oder wie der kollege gesagt hat als struktur:

    #include <iostream.h>
    #include <conio.h>
    
    //---------------------------------------------------------------------------
    
    #pragma argsused
    
    struct Test
    {
       int Wert;
       int Wert2;
    };
    
    Test StructRet(Test test)
    {
       test.Wert = 45;
       test.Wert2 = 12;
       return test;
    }
    
    void main()
    {
       Test t;
       t = StructRet(t);
       cout << t.Wert << t.Wert2;
       getch();
    }
    

    ich persönlich tendiere zur lösung mit callbyreferenz, so macht man es normalerweise wenn man eine routine benötigt die mehr als ein ergebnis zurück liefert, kommt aber auf das genaue problem an. und beide lösungen lassen sich natürlich beliebig varieren und abändern (mit parameter, ohne parameter, mit zeigern, mit referenzen, anstelle der struct könnte man auch ein array übergeben, etc. tt)...

    mfg
    murphy



  • @coderbar, fubar: habe eure posts nicht gesehen, war keine antwort da.
    jetzt hat der zig lösungen, naja...

    mfg
    murph



  • murphy schrieb:

    @coderbar, fubar: habe eure posts nicht gesehen, war keine antwort da.
    jetzt hat der zig lösungen, naja...

    mfg
    murph

    Also 'der' bedankt sich höflichst bei den Helfern für die zahlreichen (hilfreichen) Antworten!


Anmelden zum Antworten