Multiple Rückgabe/Derefferenzieren



  • Moinsen,

    ich beschäftige mich gerade mit C++ und habe eine Funktion, die mehrere Rückgaben haben soll. Das ganze passiert mit dem Aufruf

    calcPos(dt, nx, ny, nBeam, nDeg, &sPos, &dPos);
    

    dt, sind unputdaten, nx, ny, nBeam und nDeg konstanten (int) und sPos bzw dPos sollen rauskommen (double mit Sternchen).
    Leider bekomme ich es nicht, dass ich nach dem Funktionsaufruf auch die selben Daten zur Verfügung habe, wie innerhalb der Funktion calcPos. Wie bekommt man sowas am besten gelöst? Ich würde danach gerne auf einzelne Elemente aus sPos und dPos zugreifen, um damit weiterzuarbeiten.

    MfG



  • Gibt doch bitte mal die Signatur von calcPos an! Wie wird das Array sPos / dPos erzeugt?



  • Signatur aus dem h-file:

    void calcPos(double* image, int nx, int ny, int nBeam, int nDeg, double* sourceP, double* detectorP);
    

    Bisher:

    double sPos; double dPos;
    

    da ich nicht weiss, wie man das geschickter macht. Ich dachte man kann den Inhalt von sPos bzw sourceP nach dem Funktionsaufruf irgendwie casten, das klappt aber nicht.
    Was ich machen möchte ist, dass ein Array beschrieben wird. Habe aber leider nicht genug Erfahrung (wie mir scheint), um mit den Sternchen und dem Derefferenzieren vernünftig umzugehen.



  • EDIT: Hab nicht richtig gelesen

    Bin Anfang und weiß nicht genau was du meist.

    Hier ein Beispiel.Vllt hilf es dir:

    #include <iostream>
    
    using namespace std;
    
    void calcPos(int a, int* sPos, int* dPos);
    
    int main(){
    
    	int a[2] = {5,4};
    	int b[2] = {10,8};
    
    	calcPos(10,a ,b);
    
    	cout << a[0] << " " << a[1] << " " << b[0] << " " << b[1] << endl;
    
    	cin.get();
    	return 0;
    }
    
    void calcPos(int a, int* sPos, int* dPos){
    	sPos[0] += 1;
    	sPos[1] += 2;
    
    	dPos[0] += 1;
    	dPos[1] += 2;
    }
    


  • Die Funktion calcPos arbeitet intern mit Indizes, das geht mit Referenzen scheinbar nicht (Compilern fängt an zu weinen).



  • JonnyTJay schrieb:

    Bisher:

    double sPos; double dPos;
    

    Wie soll darauf mit einem Index zugegriffen werden? Das sind keine Arrays.



  • Was ich machen möchte ist, dass ein Array beschrieben wird

    Dazu musst du ein Array erzeugen.



  • Ist ja ein Teil meines Problems.

    Hmpf, ich dachte bisher, wenn ich ein pointer übergebe, bekomme ich am Ende nichts zurück, weil der Speicher woanders allokiert wird.

    Ist es nun richtig, dass wenn ich er den Speicher mit

    double* ssPos = (double *)malloc(2*nDeg*nBeam*sizeof(double));
    	double* ddPos = (double *)malloc(2*nDeg*nBeam*sizeof(double));
    

    allokiere und dann den Aufruf per

    calcPos(dt, nx, ny, nBeam, nDeg, ssPos, ddPos);
    

    durchführe, all in der Funktion erzeugten Daten in ssPos und ddPos wieder "rauskommen"?



  • Ja, tun sie. Peinlich peinlich, aber wieder was gelernt 😉


Log in to reply