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 Klasse Datum implementiert, also kann auch keine solche Funktion gefunden werden. Der Operator, der in einen std::string einliest, 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
    }
    

Anmelden zum Antworten