004
31.08.2006, 22:39 Uhr
stephanw
localhorst
|
@blubber: die Signatur des operators ist richtig - ist eben so bei Konvertierungsoperatoren. Und die Rückgabe sollte auch klappen, da der Rückgabetyp ja std::string ist. Also wird vorher aus dem char-Feld buf ein std::string gemacht, also zu einem Zeitpunkt, an dem buf gültig ist.
@Yadgar: an dem sprintf wird es zwar nicht liegen, aber guter C++-Stil ist das nicht. Da verwendet man Streams:
C++: |
#include <sstream>
FractInt::operator string() const { std::ostringstream os; os << "(" << zaehler << ", " << nenner << ")"; return os.str(); }
|
Ansonsten wundert es mich, dass "f1.c_str()" bei Dir kompiliert. Schließlich gibt es kein FracInt::c_str() .
Was verwendest Du für einen Compiler ?
Ich habe das gerade mal ins MS VC Express reingeworfen. Wenn ich in der Ausgabe-Zeile explizit f1 auf string caste, geht es bei mir. Ohne den Cast übersetzt es nicht, da er offenbar nicht erkennt, dass aus FracInt ein string gemacht werden kann. Biete ich dagegen einen FracInt::operator int() an (für Testzwecke), kompiliert das Programm. Gibt es da eine Unterscheidung, dass nach Konvertierungsoperatoren für eingebaute Typen gesucht wird, für höhere Typen jedoch nicht ?
Ich weiß schon, warum ich Konvertierungsoperatoren nicht oft benutze... für die Auflösungsregeln von solchen Sachen und evtl. vorhandener Mehrdeutigkeiten ist mein Gehirn zu klein -- Reden ist Schweigen und Silber ist Gold. |