Pointer auf Struct



  • Hallo,

    ich habe follgenden Code:

    union uPixel
    {
      ulong ulColor;
      struct
      {
        uchar Blue;
        uchar Green;
        uchar Red;
        const uchar ucReserved;
      }
    };
    
    struct uPixel *ptrBildschirm = (union uPixel *) (ptrModeInfoBlock->PhysBasePtr);
    

    so... wie greife ich nun über den Pointer ptrBildschirm auf die Variable Red zu? GCC meckert, bei

    ptrBildschirm->Red = 0xff;
    

    das lieget doch daran, dass Red nicht teil der Union ist, sondern teil der untergeordneten Struktur!?

    nun, wie greife ich über einen Pointer darauf zu??

    danke,
    Cheebi



  • Es gibt keine unnamed structs in C. Deine Struktur uPixel hat praktisch nur einen Member, ulColor. Du musst der Struktur schon einen Namen geben.



  • union uPixel
    {
      ulong ulColor;
      struct
      {
        uchar Blue;
        uchar Green;
        uchar Red;
        const uchar ucReserved;
      } RGB[b];[/b] // semikolon nicht vergessen ;)
    };
    
    struct uPixel *ptrBildschirm = (union uPixel *) (ptrModeInfoBlock->PhysBasePtr);
    
    ptrBildschirm->RGB.red = 0xFF;
    

    "unnamed unions" und structs gibt es als compilererweiterung. ansi c sagt davon nichts. folglich MUSST du das struct da drin schon noch benennen.

    edit: ich les hier aus unbestaetigten quellen, dass C++ sowas haben soll...



  • c.rackwitz schrieb:

    "unnamed unions" und structs gibt es als compilererweiterung. ansi c sagt davon nichts. folglich MUSST du das struct da drin schon noch benennen.

    edit: ich les hier aus unbestaetigten quellen, dass C++ sowas haben soll...

    iirc gibt's das auch in C99.



  • c.rackwitz schrieb:

    edit: ich les hier aus unbestaetigten quellen, dass C++ sowas haben soll...

    C++ kennt nur unnamed unions, aber keine unnamed structs.



  • Hallo,

    ja gut, dann muss ich wohl die struktur benennen. Aber das hilft mir nicht weiter. Wie greife ich dann mit dem pointer auf elemente der struktur in der union zu?

    union uPixel
    {
      ulong ulColor;
      struct sSeperated
      {
        uchar Blue;
        uchar Green;
        uchar Red;
        const uchar ucReserved;
      }
    };
    

    Nun habe ich die struktur sSeperated genannt. Wie greife ich jetzt mit dem pointer darauf zu???

    Danke soweit....

    Cheebi



  • das hab ich dir schon demonstriert. du musst die struct als "typen" nicht benennen, sondern nur erzeugen und ihr nen namen geben. siehe oben mein code.



  • upps tut mir leid*g*
    das hab ich glatt übersehen...

    VIELEN DANK!


Anmelden zum Antworten