operator = überladen für struct?
-
Wo definierst du den op= und vorallem wie?
-
Ich gehe davon aus, dass das hier dein Problem löst:
sFrameHeader& sFrameHeader::operator=(const sFrameHeader& fh);
-
freshman schrieb:
liegt es vielleicht daran, daß man einen op nur für eine Klasse überladen kann und nicht für ein 'gewöhnliches' struct?
struct ist eine Klasse, der Unterschied besteht daran, dass alle Members einer struct per default public sind, auch die Zugriffsebene bei Ableitung ist public. Bei einer Klasse dagegen ist es private.
Um es zu verdeutlichen:
struct B : A { int a; }; class B : public A { public: int a; }; //andersrum struct B : private A { private: int a; }; class B : A { int a; };
-
sFrameHeader& sFrameHeader::operator=(const sFrameHeader& fh);
Ich habe das jetzt gemacht und die Funktion einfach mal ins struct geschrieben... aber ich kriege trotzdem an einer Stelle den Fehler:
foo(88) : error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'struct sFrameHeader' (or there is no acceptable conversion)Ich muss doch irgendwie den Operator für das struct überladen können. Oder soll ich daraus ne Klasse machen? Alle Membervariablen als Public deklarieren und dann die Operatoren überladen?
-
Schade, meine Beiträge werden einfach ignoriert...
-
Der Operator wird in der gleichen .h definiert wie das struct...
Oder was willst du wissen?
-
Der Operator wird in der gleichen .h definiert wie das struct...
Das ist schonmal schlecht. entweder su setzt dann ein inline davor oder du hast ihn eh inline in der struct definiert.
operator= kann nur als Member definiert werden (wie Shlo dir schon gesagt hat). So wie deine Fehlermeldungen aussehen versuchst du ihn aber frei zu implementieren.
-
Ach *ditsch* Sorry... hab nicht genau gelesen...
Die Deklaration:struct sFrameHeader { ... sFrameHeader& operator=(const sFrameHeader& fh); ... };
Die Definition in der dazugehörigen .cpp:
sFrameHeader& sFrameHeader::operator=(const sFrameHeader& fh) { ... return *this; };
Vielleicht war es ja das. Wenn nicht -> mehr Quelltext posten hilft!
[edit]sinnvollerweise sollte auch eine Referenz zurückgegeben werden![/edit]
-
Helium schrieb:
Der Operator wird in der gleichen .h definiert wie das struct...
Das ist schonmal schlecht. entweder su setzt dann ein inline davor oder du hast ihn eh inline in der struct definiert.
operator= kann nur als Member definiert werden (wie Shlo dir schon gesagt hat). So wie deine Fehlermeldungen aussehen versuchst du ihn aber frei zu implementieren.
Was ist inline?
Habs schon nen paar mal gesehen, aber habs nicht weiter hinterfragt.Deadlef:
Ich habs so gemacht wie du es schreibst, aber wie schon weiter oben gesagt, kriege ich nen Fehler wenn ich ein struct1 = struct2; machen will.Achja. Dabei meckert er übrigens nciht:
bool operator==(sFrameHeader fh1, sFrameHeader fh2);
-
Seeeehr seltsam, bei mir funktioniert es so nämlich.
Dann nochmal: Mehr Code posten wirkt manchmal Wunder!
-
Ahhh sorry, funktioniert doch. Hab an anderer Stelle nen Fehler gemacht. Jetzt funzt es wunderbar. Danke.