>>-operator überladen
-
Hallo!
Ich habe folgende Klasse:
class Kapsel { public: inline operator MeinTyp() { return m_type; } private: MeinTyp m_type; };und eine andere Klasse, wo ich gerne den ">>"-operator anbieten wuerde, um Werte in "Kapsel" zu schreiben:
class Streamer { public: virtual Streamer& operator >>(MeinTyp& type) { m_quelle >> type; // m_quelle liefert ein MeinTyp return (*this); } };Mein gcc meldet mir "no known conversion for argument 1 from 'Kapsel' to 'MeinTyp'.
Wo liegt der Fehler? Geht das überhaupt, was ich vorhabe?
-
Na, sicher dass du MyType übergeben und dann in ein Temporary einlesen willst? Ne Referenz wär da irgendwo sinnvoller.

http://ideone.com/1oeWGPS: Noch sinnvoller wäre natürlich eine freie (friend) Funktion, statt einem solchen undurchsichtigen Gewurschtel.
-
ScopeOperator schrieb:
wo ich gerne den ">>"-operator anbieten wuerde, um Werte in "Kapsel" zu schreiben
Du bietest nur eine Operator>> an, um in "MeinTyp" zu schreiben, nicht in Kapsel.
Mein gcc meldet mir "no known conversion for argument 1 from 'Kapsel' to 'MeinTyp'.
Deie Kapsel kann nur in ein temporäres MeinTyp-Objekt umgewandelt werden, aber die nicht-konstante Referenz deines Operator>> kann nicht an ein temporäres Objekt gebunden werden, daher fällt die Konvertierung flach (ich vermute dass das die Absicht gewesen wäre).
Hätte aber eh keinen Sinn gemacht, denn die Kapsel erst in ein MeinTyp umzuwandeln und dann in den MeinTyp was reinzuschreiben hätte an der Kapsel nichts geändert.Lösung: Mach das was du geschrieben hast: operator>> für Kapsel, nicht für MeinTyp. (Und lass die implizite Konvertierung weg, die brauchst du in den wenigsten Fällen, macht oft nur Ärger)