Funktion mit struct als Rückgabewert



  • Hi,
    ich habe ein kleines Problem.
    ich habe eine Struktur gebastelt und dann erstelle ich ein Objekt:

    struct Satellite Satellite
    

    Die Funktion:

    struct Satellite* func(struct Satellite* S, float secperframe) {
    ...
    return S;
    

    nun wenn ich in Satellite das return von func() einlesen möchte. Wie mach ich das?

    Satellite=func(&Satellite, secperframe);
    

    funktioniert nicht.
    Ich weiss nicht wo ich jetzt mit zeiger und wo nicht.
    Ach ja Call-by-Value kommt nicht in frage, da struct 7 Elemente beinhaltet
    gruss

    Lukas



  • Was funktioniert nicht?

    Das kompilieren, oder macht die Funktion nicht das was sie soll, also in bezug auf den Rückgabewert?

    Ist Satellite ein Zeiger?



  • es gibt ein Fehler beim Kompilieren:
    kann 'Satellite &Satellite::operator =(const Satellite &)' sein bei Anpassung der Argumentliste '(Satellite, Satellite *)'



  • Xbelt schrieb:

    struct Satellite Satellite
    

    Seit wann kann man den gleichen Bezeichner für Typ und Variable verwenden?

    Ausserdem kannst du keinen Zeiger einem Objekt zuweisen (zumindest nicht einfach so).



  • Das anderr Problem bleibt:
    Wie kann ich die Struktur via call-by-reference der Funktion übergeben und diese dann mit return zurückgeben?
    return brauche ich um die Struktur wieder zu aktualiesieren



  • Müsste die geschichte nich in ANSI C forum?

    struct Satellite* func(struct Satellite* S, float secperframe)
    {
    ......
    return S;
    }
    
    int main(void){
    struct Satellite XY;
    struct Satellite *ptr;
    
    ptr= func(&XY,0.0);
    
    return 0;
    }
    


  • Xbelt schrieb:

    return brauche ich um die Struktur wieder zu aktualiesieren

    Nö brauchst du nicht. Wenn du sie mit call by reference übergibst, wird jede Aktion auf dem übergebenen Argument direkt auf den struct ausgeführt (deshalb ists ja by reference) und verschoben wirds auch nicht, der Zeiger den du vorher hattest ist also hinterher immernoch gültig.



  • argh bin ihc blöd^^
    Danke schon mal


Log in to reply