Struct - Nachhilfe



  • hi,

    1. bitte benutze cpp tags (button unter den smilys)

    bitte werde etwas genauer mit deiner anfrage. so wie es aussieht hast du aber ein grundsätzliches verständnissproblem bei structs

    eine struct ist eine sammlung von eigenschaften EINES Objektes

    also ein struct familie bsp die eigenschaften

    familie eins;
    eins.name='a';//ein char ist nämlich genau EIN Zeichen!!
    eins.haus=true;
    ....
    familie arr[3];//in einem array eingesetzt
    arr[0].name='b'
    

    mehrere dieser structs kannst du natürlich auch in einem array speichern.

    allerdings würde ich dir empfehlen dir nochmals die grundlagen von C++ anzuschauen. aus der benutzung von structs und char schließe ich das da eventuell noch etwas nachholbedarf ist. 🙂



  • char ist ein Datentyp, der nur ein einzelnes Zeichen speichert (steht schließlich für character). Du benötigst in deinem Fall string.



  • ohh, ich glaube ich wurde etwas missverstanden 😃
    Ich habe kein C++ tag benutzt, weil mein Code lediglich eine Art 'Skizze' war, deshalb ist das auch nicht ganz korrekt, was das "char" angeht (ich weiß ich müsste eigentlich

    char abc[100]
    

    z.b schreiben)

    Das, was nicht so funktioniert, war mein Versuch auf eine Lösung zu kommen. Ich hatte kein Problem als es nur um eine "Familie" ging, sobald aber mehr dazu kamen, bin ich auf keinen logischen Ansatz mehr gekommen.

    Danke allen für die rasche Hilfe. Ich werde mir mal das, was Fencer gepostet hat, genauer ansehen.



  • Wird familienklima eigentlich in Grad oder in Celsius angegeben?



  • SehrJei schrieb:

    Wird familienklima eigentlich in Grad oder in Celsius angegeben?

    Wenn schon, dann in Grad Celsius.

    @ OP: wenn du keinen guten Grund dagegen hast, müsstest du string abc; schreiben.



  • Hm, also irgendwie mache ich noch irgendwas falsch. Ich glaube es liegt daran, wo und wann ich das Struct und seine Elemente deklariere.
    Ich habe eine Headerdatei mit allen Variablen etc. dort wird mein Struct und seine Elemente definiert. Die Variable zu diesem Struct wird ebenfalls dort deklariert.
    Wenn ich nun mein Struct ebenfalls in dieser Headerdatei "befülle", bekomme ich eine Menge Fehler. z.B "Fehlender Typspezifizierer - int wird angenommen." oder dass ich ein ";" vergessen hätte etc.


  • Mod

    werda schrieb:

    Hm, also irgendwie mache ich noch irgendwas falsch. Ich glaube es liegt daran, wo und wann ich das Struct und seine Elemente deklariere.
    Ich habe eine Headerdatei mit allen Variablen etc. dort wird mein Struct und seine Elemente definiert. Die Variable zu diesem Struct wird ebenfalls dort deklariert.
    Wenn ich nun mein Struct ebenfalls in dieser Headerdatei "befülle", bekomme ich eine Menge Fehler. z.B "Fehlender Typspezifizierer - int wird angenommen." oder dass ich ein ";" vergessen hätte etc.

    Das hört sich ein bisschen wirr an, wie du die Begriffe Definition und Deklaration hier verwendest. Außerdem ist es nicht ganz der Zweck einer Headerdatei, dass dort Sachen 'befüllt' werden. Zeig am besten mal den Code her.

    Die Fehlermeldung klingt danach, als hättest du einen Syntaxfehler der Definition deiner struct-Instanz gemacht. Genau kann man das erst sagen, wenn man den Code sieht.



  • struct familie
    {
    string name;
    string wohnort;
    bool haus;
    int familienklima;
    int mitglieder;
    };
    

    dann die variable:

    familie fam[2];
    

    hier das "befüllen":

    fam[0].name = "Maier";
    fam[0].wohnort = "Hier";
    fam[0].haus = false;
    fam[0].familienklima = 0;
    fam[0].mitglieder = 2;
    

  • Mod

    Das ist richtig, insofern:
    a) Der Compiler weiß, was string ist: Möglicherweise include vergessen? Daran gedacht, dass string im Namespace std ist?
    b) Die Wertzuweisungen sich innerhalb eines Codeblocks befinden



  • Ich vermute es liegt an b).

    Ich möchte die Wertezuweisung nämlich gerne global haben. Heißt das findet außerhalb eines Codeblocks statt.



  • Dann einfach dafür die Struktur-Initialisierung verwenden:

    familie fam[2] =
    {
      { "Maier", "Hier", false, 0, 2 },
      { "Maier Zwo", "Dort", true, 1, 3 }
    };
    


  • Bei deiner Struct definition ist kein typedef angegeben, demnach müsste es heissen

    struct familie fam[3];
    

    oder du machst

    typedef struct
    {
    string name;
    string wohnort;
    bool haus;
    int familienklima;
    int mitglieder;
    }familie;
    
    //dann klappt auch
    familie fam[3];
    

    oder bin ich jetzt falsch?

    Gruß,
    Sascha



  • Sascha schrieb:

    ...

    Wir sind hier im C++ Unterforum und nicht im C-Teil...

    bb



  • Sascha schrieb:

    Oder bin ich jetzt falsch?

    Gruß,
    Sascha

    Jau. In C++ braucht man das typedef nicht.



  • unskilled schrieb:

    Sascha schrieb:

    ...

    Wir sind hier im C++ Unterforum und nicht im C-Teil...
    bb

    oh...stimmt! 😃
    Sorry!

    aber...

    werda schrieb:

    ... bekomme ich eine Menge Fehler. z.B "Fehlender Typspezifizierer - int wird angenommen." oder dass ich ein ";" vergessen hätte etc.

    evtl hat er isn falsche unterforum geschrieben. 😕
    Die Fehlermeldungen klingen für mich nach C ...

    Sascha



  • fam[0].familienklima = 0;
    

    😃


Anmelden zum Antworten