Forum: Compiler & IDEs Const Array von Klasseninstanzen und der this-Pointer


von Dosmo (Gast)


Lesenswert?

Hallo zusammen,

ich habe ein statisches Array von Klasseninstanzen, welches im Flash 
liegen soll. Das habe ich so angelegt:
1
const output_t output_as[NUMBEROFOUTPUTS] = { OUTPUT_CFG };
(wobei OUTPUT_CFG ein Makro ist, das die komplette Initialisierung 
enthält)

Wenn ich nun eine Methode aufrufen will:
1
output_as[i].Init();
dann meckert der Compiler (zu Recht), daß der This-Pointer vom Typ
1
const output_t
ist, aber die Methode einen This-Pointer vom Typ
1
output_t
erwartet.

Nun kann ich das Problem mit einem Cast lösen:
1
((output_t*) (&output_as[i])) -> Init();
und es funktioniert auch alles wie gewollt, aber schön ist das ja nicht.

Gibt es einen eleganteren Weg?
So etwas wie
1
const class output_t {...};
funktioniert ja nicht.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Du musst die Init()-Methode als const deklarieren, um dem Compiler
anzuzeigen, dass sie das Objekt nicht verändert:
1
class output_t {
2
  void Init() const;
3
};

Dann kannst du Init() auch für ein const-Objekt aufrufen.

von Dosmo (Gast)


Lesenswert?

Das war's, danke!

von Klaus W. (mfgkw)


Lesenswert?

Wobei sich die Frage stellt, warum eine Methode, die nichts ändert, 
"Init" heißt. Viel initialisieren kann sie ja nichts, wenn sie für ein 
const-Objekt aufgerufen wird.

Sollte sie wirklich etwas initalisieren, sollte das im Konstruktor 
gemacht werden. Wenn das nicht der Fall ist, ist der Name wohl einfach 
falsch.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.