struktur-wirrwarr ?!



  • hallo,
    ich möchte gerne auf einen inhalt einer struktur zugreifen, aber ich komme da wohl durcheinander, denn der compiler mag das nicht so 🙂

    hier erstmal, worauf ich zugreifen möchte:

    table->(users[table->numUsers])->user
    

    compiler gibt aus:

    error: expected identifier before ‘(’ token

    wenn ich die klammern weglasse (sind eh nicht nötig oder), dann sagt er:

    error: invalid type argument of ‘->’

    und hier jetzt die strukturen (ich habe einen jobtable namens "table" erstellt)

    struct jobtable{
        int numUsers;
        struct user users[MAXUSERS];
    };
    
    struct user{
        char user[NAMELENGTH];
    };
    

    was mach ich da falsch?
    danke



  • ich habe einen jobtable namens "table" erstellt

    a) Nein, du hast nur eine Struktur deklariert!

    struct jobtable
    {
        int numUsers;
        struct user users[MAXUSERS];
    };	
    
    struct user
    {
       char user[NAMELENGTH];
    };
    

    b) Deklaration von struct user steht nicht über struct jobtable.

    c) Wieso muss ich fragen, wie du die Datentypen definiert hast?



  • a)
    doch, habe ich, aber wieso sollte ich die zeile hier posten.
    er kann auf jeden fall(!) beim aufruf auf "table" zugreifen.

    b)
    was meinst du? das hört sich zumindest so danach an, als ob das der fehler wäre :p

    c)
    meinst du die konstanten? das ist nicht von bedeutung, sagen wir mal 50 😉
    die datentypen, also strukturdeklarationen stehen ja da.
    oder was meinst du mit den datentypen?

    danke



  • sorry wie gesagt, ich werd jede 4 sekunden ausgeloggt..kA warum.

    ich weiss jetzt, was du mit b) meinstest:

    das ganze steht in einem extra modul, dass ich inkludiere.

    zu dem zeitpunkt des aufrufs ist das alles(!) geladen.



  • hdiloggedout schrieb:

    a)
    doch, habe ich, aber wieso sollte ich die zeile hier posten.
    er kann auf jeden fall(!) beim aufruf auf "table" zugreifen.

    Damit jeder sieht, wie du deinen Bezeichner gebildet hast, eventuell greifst du falsch auf die Elemente zu, deshalb ist das wichtig. Ansonsten bekommst du keine Antworten oder es findet sich jemand, der viel Zeit hat und gerne rätselt, wie eigentlich die Grundlage von deinem Problem ist.

    👎



  • okay sorry,
    mein programm ist sehr umfangreich, ich versuche das halt nur zu abstrahieren.

    also im modul server.c wird folgendes gemacht:

    struct jobtable *table;
    struct user *users;
    struct job *jobs;
    
    table = malloc(sizeof(struct jobtable));
    jobs = malloc(sizeof(struct job))
    users = malloc(sizeof(struct user));
    

    in einem anderen modul, x.c dann:

    extern struct jobtable *table;
    extern struct job *jobs;
    extern struct user *users;
    

    und dann:

    {...
    
    printf("%s   \n", table->users[table->numUsers]->user);
    
    ...}
    


  • Wenn, dann so:

    printf("%s   \n", table->users[table->numUsers].user);
    


  • okay, vielen dank.

    ich habe mir überlegt, wieso das der fall ist.
    aber ich weiss es nicht 😕

    ich habe nur noch irgend etwas im kopf vonwegen
    dass man nur bei pointern mit "->" macht, und sonst punktnotation..

    bah, bin grad durcheinander ^^

    weshalb genau schreibe ich vor dem user alles mit "->", wende dann aber das alles auf user mittels punktnotation an?

    thx

    edit: ich meine natürlich nicht mit pointern, sondern bei strukturen mit "->",
    weil das eine einfachere scheribweise für (*bla).blub ist oder..



  • hdi schrieb:

    weshalb genau schreibe ich vor dem user alles mit "->", wende dann aber das alles auf user mittels punktnotation an?

    Wie greift ein Pointer auf eine Struktur auf ihre Elemente zu, wie spreche ich Elemente einer Struktur an?


Anmelden zum Antworten