none
c++ Operator << in Klasse definieren? RRS feed

  • Frage

  • Hi,

    main.cpp:

    [...]
    cout << v;
    [...]
    

    Vektor.h:

    #include <iostream>
    using namespace std;
    [...]
    public:
    [...]
      ostream& operator<<(ostream& ausgabe);
    [...]
    

    Vektor.cpp

    template<typename T>
    ostream& Vektor<T>::operator<<(ostream& ausgabe)
    {
       ausgabe << '(';
        for (unsigned int position=0;
     position<v.Groesse(); ++position)
      {
            ausgabe << v[position] << ' ';
        }
       ausgabe << ')';
        return ausgabe;
    }
    

    ich erhalte in main.cpp folgende Fehlermeldung

    D:\DATEN\DATEN\C++\Dummy\test\main.cpp|17|error: no match for 'operator<<' in 'std::cout << v'|
    

    Kann man etwa die Operatorfunktion für << nicht in der Klasse definieren? Oder muss ich noch etwas für die Sichtbarkeit beachten?

    Mittwoch, 7. November 2012 20:53

Antworten

  • Hallo

    Du musst die Reihenfolge beachten.

    a << b ruft a::operator<<(b) auf

    und

    b << a ruft b::operator<<(a) auf

    Heisst in deinem Fall, dass cout << v den operator vom 'cout' aufrufen will. Und in der Klasse von cout (nämlich ostream) ist kein operator<<(Vektor) definiert. Daher klappt's nicht. Was du aufrufen könntest wäre hingegen v << cout; ... das würde (weil du den zugehörigen operator<< definiert hast) klappen... sieht natürlich etwas komisch aus dann.

    Rudolf

    • Als Antwort markiert icekeuter Freitag, 9. November 2012 07:19
    Mittwoch, 7. November 2012 21:56

Alle Antworten