[C++] typedef struct* als Referenz

Jacal

Mitglied
Hallo,
ich wollte eine eigene structur als Referenz übergeben, allerdings streikt dabei der Compiler...

Hier die Struktur:
Code:
typedef struct
{
      char *pic;
        int cxPos;
        int cyPos;
        int mxPos;
        int myPos;
       bool enabled;
} BRICK;

Die Funktion heißt:
Code:
void    PaintBricks                 (HDC&, BITMAPINFO**&, BRICK&*, int);

void    PaintBricks         (HDC &hdc, BITMAPINFO **&hBrick, BRICK *&bricks, int brickanz)
{
      [...]
}

In der Main-Funktion steht dann:
Code:
static int MAXBRICKS = 10;
BRICK bricks[MAXBRICKS];

[...]

PaintBricks (hdc, hBrick, bricks, MAXBRICKS);

Jetzt meldet mir der Compiler (GCC):
error: invalid initialization of non-const reference of type 'BRICK*&' from a temporary of type 'BRICK*'
|error: in passing argument 3 of `void PaintBricks(HDC__*&, BITMAPINFO**&, BRICK*&, int)'


Kann ich Zeiger auf Stukturen etwa nicht als Referenz übergeben oder woran liegt der Fehler? Und gibt es eine Möglichkeit BRICK* trotzdem als Referenz zu übergeben?

Mfg, Jacal.
 
Hi.

Was versuchst du denn da?

Wozu willst du eine Referenz auf einen Zeiger übergeben den du über ein Array erzeugst? Warum übergibst du nicht einfach das Array?

Der Fehler kommt daher, weil ein Array automatisch in einen Zeiger auf das erste Element des Arrays umgewandelt wird. Dieser Zeiger ist allerdings nur ein temporärer Wert und besitzt selbst keinen Speicher. Und einen solchen temporären Wert darf man deshalb in C++ nicht als Referenz übergeben, weil eine Änderung sich schließlich nur auf den temporären Wert auswirken würde, was einfach keinen Sinn macht.

Gruß
 
Hi.

Was versuchst du denn da?

Wozu willst du eine Referenz auf einen Zeiger übergeben den du über ein Array erzeugst? Warum übergibst du nicht einfach das Array?

Der Fehler kommt daher, weil ein Array automatisch in einen Zeiger auf das erste Element des Arrays umgewandelt wird. Dieser Zeiger ist allerdings nur ein temporärer Wert und besitzt selbst keinen Speicher. Und einen solchen temporären Wert darf man deshalb in C++ nicht als Referenz übergeben, weil eine Änderung sich schließlich nur auf den temporären Wert auswirken würde, was einfach keinen Sinn macht.

Gruß

Oh, ich hatte wohl etwas falsch gelernt. Ich brauche die Struktur ja gar nicht als Referenz übergeben, da ich per Zeiger ohnehin auf Originaldaten zugreifen kann.

Danke für die Gedächtnisstütze, deepthroat :)
 
Zurück