istream überladen?
-
Was kann ich bei folgendem Fehler machen?
Binärer Operator '>>': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'Datum' akzeptiert (oder keine geeignete Konvertierung möglich)class Datum { // ... public: friend std::istream& operator >>(std::istream&, std::string&); }; // ... std::istream& operator >>(std::istream& is, std::string& s) { return is >> Datum(s); // hier ist der Fehler }
-
Du hast keinen
operator>>für deine KlasseDatumimplementiert, also kann auch keine solche Funktion gefunden werden. Der Operator, der in einenstd::stringeinliest, existiert in der Standardbibliothek übrigens schon.Du willst wahrscheinlich sowas:
std::istream& operator>> (std::istream& is, Datum& d);
-
Naja, ich will, das man einen String einließt und dieser dann in den Datum-Konstruktor übernommen wird. Datum ist ja eine Klasse, dessen Konstruktor ich aufrufe. Ich dachte, friend ist dafür auch zu gebrauchen?
-
Aber in diesem Falle brauchst du ja keinen
operator>>für das Datum? Da reicht ja der Konstruktor...class Datum { public: Datum(const std::string& String); // ... }; int main() { std::string DatumString; // String erstellen std::cin >> DatumString; // und einlesen Datum Heute(DatumString); // Objekt mit diesem String konstruieren }