Struktur in einer Struktur



  • Hi @all.
    Ich habe ein kleines Strukturproblem.
    Ich wollte die Variablen die ich in einer Klasse
    benutze (als Private) vorher in einer externen Struktur definieren,
    damit ich diese Ordnen kann. Die Variable würde ich daher sinvollerweise in eine Srtuktur machen. Die Struktu heisst Person. Mein Problem ist,das
    ich nicht weiss ich wie ich das mit den Strukturen in der Struktur machen soll...^^

    bsp:

    struct ez
    {
    	struct identifier
    	{
    		int  PersNr,AudiNr;
    
    	}ident;
    	struct money
    	{
    		float Gehalt, Urlaub;
    	}geld;
    };
    

    so wie es dort steht geht es. mit geld und ident direkt an die struktur gebunden. ich würde es gerne anders machen doch da meckert er:

    class CPerson  
    {
    private:
    	struct ez inclass;    <----- das hier geht(nur ich brauch ja auch variablen von den inneren strukturen...dahier auch:
    
    	struct money geld;    <----- hier meckert er jedoch, sagt das er money nicht kennt. kommt er nicht zur inneren struktur?? wie kann ich das machen??
    }
    

    thx!!! 🙂



  • Aber das ergibt doch gar keinen Sinn.
    Eine Variablendefinition verlangt doch, dass Speicher für die Struktur reserviert wird.

    Wenn du Ordnen willst, schau dir mal Namespaces an.



  • Bunti schrieb:

    class CPerson  
    {
    private:
    	struct ez inclass;    <----- das hier geht
    
    	struct money geld;    <----- hier meckert er jedoch, sagt das er money nicht kennt.
    }
    

    er kann hier die struktur money nicht kennen da es sich in deiner ez struktur befindet also in einem anderen Gueltigkeitsraum

    weiters: so wie du es geschrieben wird hier nach

    struct ez inclass;
    

    gar kein

    struct money geld;
    

    mehr benoetigt

    du kannst hier schon per

    inclass.geld
    

    auf die interne struktur zugreifen, aber es waere natuerlich besser die struktur money wieder einzeln mit new zu alloziern, auser die benoetigst hier nur ein Exemplar von money



  • wie meinst du das? meinst du , wenn ich mehrere money-strukturen erstellen will?? wie könnte man das machen?
    d.h. wenn ich 1 struktur ez ertselle ist automatisch 1 exeplar der inneren vorhanden? und du meinst also jetzt, falls ich mehr haben will von money z.b. sehe ich das richtig??? 🙂
    wie könnte das aussehen? habe zu lange mit malloc usw. gearbeitet. new und delete und so kenn ich noch nicht lange wie würde das aussehen wenn ich 2 oder 3 von money erstellen möchte??

    thx!!! 🙂



  • überlege doch mal wie es mit malloc aussehen würde 🙂



  • hmm also der befehl würde mir vielleicht noch einfallen mein problem jedoch ist, dass ich gar nicht weiss, wohin der befehl soll^^ 🙂



  • ich habe noch ein Problem. Es scheint doch nicht so zu gehen. das aufrufen mit inclass.geld geht ja, weil ich am ende der struktur noch das geld erstellt habe.
    was ich ja gerne machen möchte ist, variablen der ganzen strukturen (also auch der innerenen) zu erstellen auch woanders, also nicht direkt hinter der struktur.



  • Bunti schrieb:

    ich habe noch ein Problem. Es scheint doch nicht so zu gehen. das aufrufen mit inclass.geld geht ja, weil ich am ende der struktur noch das geld erstellt habe.
    was ich ja gerne machen möchte ist, variablen der ganzen strukturen (also auch der innerenen) zu erstellen auch woanders, also nicht direkt hinter der struktur.

    Nabend,

    das kannst du dann so machen:

    ez::identifier id;
    ez::money money;
    

    sprich, du musst voll qualifizieren.

    mfg
    v R



  • Und um dich noch mehr zu verwirren, hier die drei angesprochenen Wege in einem einzigen Beispiel.

    class CPerson
    {
    public:
        struct ez inclass;              // 1.
    
        struct ez::money geld;          // 2.
        struct ez::money *mehrgeld;     // 3.
    };
    
    ...
        CPerson person;
    
        // 1. Instanz von ez (inclass)
        person.inclass.geld.Gehalt = 1000.0;
        person.inclass.geld.Urlaub = 30.0;
    
        // 2. Instanz von ez:money (geld)
        person.geld = 1800.0;
    
        // 3. dynamisches Array 'mehrgeld'
        person.mehrgeld = new ez::money[10];
    
        person.mehrgeld[0].Gehalt = 15000.0;
        person.mehrgeld[1].Gehalt =  8500.0;
    
        ...
    
        delete [] person.mehrgeld;  // und was wir mit new anlegen, löschen wir auch brav wieder mit delete
    


  • hmm danke das war einleuchtend. so ist aber meine vermutung richtig, das man innerhalb inclass z.b. nur die strutkuren verwenden kann (z.b. geld), wenn man diese auch bei der 'schablone' deklariert hat. hinterher ist zwar noch die struktur verfügbar, aber man kann die variable vom typ money nicht mehr in inclass haben, wenn diese (wie geld) nicht innerhalb der struktur deklariert wurde. richtig??

    thx 🙂


Anmelden zum Antworten