Struct als Rückgabetyp einer Membervariable



  • Hallo,

    weis jemand wie ich in meiner Aufrufenden Routine ein Struct komplett zurückerhalten kann ? Will z.B. folgendes machen aber geht nicht :-(((.
    Kann mir da jemand helfen brauche das ganze Struct mit einem mal zurück nicht einzelne Teile.

    Danke schon mal

    struct A
    {
     int wert1;
     int Wert2;
     int Wert3;
    };
    
    class B
    {
    public:
     B();
     ~B();
     struct A GetStruct();
    }
    
    A B::GetStruct()
    {
     struct A a = {0, 0, 0};
    
     a.Wert1 = 10;
     a.Wert2 = 20;
     a.Wert3 = 30;
    
     return a;
    }
    
    // In der Aufrufenden Routine 
    ...
    B b;
    struct A a_2;
    a_2 = b.GetStruct();      // funktioniert nicht :-(((
    ...
    


  • "Funktioniert nicht" ist keine Fehlerbeschreibung.

    Vermutlich reicht es schon, wenn du die Deklaration von B mit einem Semikolon abschließt.



  • Die Fhlermeldung die ich erhalte ist

    error C2079: 'a_2' verwendet undefiniertes struct 'A'
    error C2078: Zu viele Initialisierungen
    error C2679: Binaerer Operator '=' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'struct A' akzeptiert (oder keine geeignete Konvertierung moeglich)

    B befindet sich in einer anderen Datei macht das was ?

    Das oben ist nur ein Beispiel um nicht extrem viel Code zu posten und die Übersicht zu erhalten.

    Wie machst du denn das immer wenn du ein komplettes Struct zurückgeben willst ?



  • Da gibt es nichts besonderes zu zu sagen, das klappt einfach so. A muss natürlich an der Stelle bekannt sein, an der es verwendet wird. BTW schreibt man normalerweise nur A und nicht struct A.



  • Kann das vieleicht daran liegen das er das Struct nicht kennt da ich die Klasse in einer anderen Datei verwende und dort das Struct global deklariert ist ?

    Wenn ja wie kann ich das besser machen ?

    Danke



  • Das keyword struct und class sind identisch bis auf den kleinen Unterschied, dass ein struct mit public: anfängt und ein class mit private:
    Die Schreibweise struct A kommt von C weil da ein struct nicht automatisch als Type declariert ist.

    Du must dein struct in beiden Dateien declarieren, das heist:

    struct A 
    { 
     int wert1; 
     int Wert2; 
     int Wert3; 
    };
    

    schreiben. Um nun ein struct dieses Types zu definieren schreibst du:

    A a;
    

    Um ein struct dieses Types allerdings zu declariren musst du:

    extern A a;
    

    schreiben.

    Im klare text heist das:
    Datei 1:

    struct A
    {
        int a;
    };
    A b;
    A func(void)
    {
        A c;
        c.a=5;
        return c;
    }
    

    Datei2:

    #include<iostream>
    using namespace std;
    struct A
    {
        int a;
    };
    extern A b;
    A func(void);
    int main()
    {
        b=func();
        cout<<b.a<<endl;
        system("pause");
        return 0;
    }
    

Anmelden zum Antworten