operator[] problem
-
hola leute
irgendwie seh ich den wald vor lauuter baeume nicht mehr.
hab folgenden code:class CharStat { private: uint32 stat[256]; public: CharStat(void) { Clear(); } ~CharStat(void) { } void Clear(void) { memset(stat, 0, sizeof(uint32) * 256); } uint32& operator[](uint32 pos) { return stat[pos]; } void operator()(const uint8 *buffer, uint32 buffer_size); };wenn ich nun mal
CharStat stat; ... uint32 temp = stat[0];verwende bekomm ich immer folgenden fehler:
error C2678: Binärer Operator '[': Es konnte kein Operator gefunden werden, der einen linksseitigen Operanden vom Typ 'const txl::CharStat' akzeptiert (oder keine geeignete Konvertierung möglich)sieht da jemand den fehler ?
Meep Meep
-
Ist dein stat-Objekt beim Aufruf von operator[] const? Das würde die Fehlermeldung erklären, denn du hast diesen Operator nur für nicht-konstante Objekte definiert.
-
re
in der tat war es so.
hab nun den rueckgabewert von operator[] von 'uint32&' auf 'uint32' geaendert.
aber die meldung kommt jetz noch immer.
jetzt waere doch egal ob das object const ist oder nicht. oder ?Meep Meep
-
Nein, das hat damit absolut nichts zu tun.
Eine const-Funktion könnte zum Beispiel so aussehen:
uint32 operator[](uint32 pos) const { return stat[pos]; }
-
Z2 schrieb:
Nein, das hat damit absolut nichts zu tun.
Eine const-Funktion könnte zum Beispiel so aussehen:
uint32 operator[](uint32 pos) const { return stat[pos]; }aber dann hab ich ja auch nicht mehr die moeglichkeit per operator[] einen wert zu aendern. das waer doch dann bloed. wie mach ich das ohne kopie im rueckgabewert und das ich einen wert , vorausgesetzt das das CharStat objekt nicht const ist, aendern kann ?
Meep Meep
-
Du mußt die operatorfunktion auch noch const machen. Bastel dir doch zwei []Operatoren. Einen const mit Elementrückgabe und einen nicht const mit Referenzrückgabe.
[edit]man ist das spät.
[edit]
-
Meep Meep schrieb:
aber dann hab ich ja auch nicht mehr die moeglichkeit per operator[] einen wert zu aendern.
Wenn das zugrundeliegende Objekt const ist, sollst Du es auch garnicht ändern können

-
LordJaxom schrieb:
Meep Meep schrieb:
aber dann hab ich ja auch nicht mehr die moeglichkeit per operator[] einen wert zu aendern.
Wenn das zugrundeliegende Objekt const ist, sollst Du es auch garnicht ändern können

das ist mir schon klar. waere auch logischer, das er mir dann ne fehlermeldung ausgeben wuerde wenn ich an nem const-objekt ne aenderung machen moechte.
wenn ich nur eine kopie des wertes zurueckgebe, koennte ich es ja uach nicht aendern.
werd es wohl so machen muessen wie braunstein es meinte. zwar umstaendlich deshalb zwei members schreiben zu muessen, aber da kann man wohl nix machen.Meep Meep