Templates und operatoren überladen



  • danke - aber es will nicht *heul*



  • Wie wäre es mit Fehlermeldungen? So können wir auch nur raten.

    BR



  • //Es sieht so aus, als hättest du die Namen der Argumente vergessen!
    template <class T>
    ostream & operator << (ostream&, const Kset<T> &)
    {
     Kset::Knoten *ptemp = kl.pFirst;
     for(int anz = kl.Anzahl;  anz != 0; anz--)
     {
      //hier willst du wahrscheinlich nicht den ostream cout, sondern den mit dem nichtgefundenen namen benutzen
      cout<<ptemp->Inhalt<<" ";
    
      ptemp = ptemp->pNext;
     }
     //auch hier nicht cout, sondern den den ostream-Parameter mit dem nichtgefundenen namen
     cout<<endl;
    
     return os;//hier den ostream-Parameter mit dem nichtgefundenen namen zurückgeben
    }
    


  • hab das jetzt mal verändert ...

    ostream & operator << (ostream &os, Kset & kl)
    {
     Kset::Knoten *ptemp = kl.pFirst;
     for(int anz = kl.Anzahl;  anz != 0; anz--)
     {
      cout<<ptemp->Inhalt<<" ";
      ptemp = ptemp->pNext;
     }
     cout<<endl;
     return os;
    }
    

    aber es will net ...



  • Wie wäre es mit Fehlermeldungen?



  • Du solltest cout auch mit os ersetzen damit das ganze hier überhaupt sinn macht.

    ostream & operator << (ostream &os, Kset & kl)
    {
     Kset::Knoten *ptemp = kl.pFirst;
     for(int anz = kl.Anzahl;  anz != 0; anz--)
     {
      os<<ptemp->Inhalt<<" ";
      ptemp = ptemp->pNext;
     }
     os<<endl;
     return os;
    }
    

    Edit: Fehlermeldungen zeigen! Die 3.



  • Jetzt solltest du nur noch dein cout durch deinen angelegten ostream& os ersetzen, dann sollte es auch funktionieren 🙂



  • 1. Wieso cout << ... und nicht os << ...?
    2. Wieso plötzlich Kset &kl und nicht mehr const Kset &kl?



  • Also ... Fehlermeldung wie oben schon gesagt:

    Linkerfehler ...

    [Linker Fehler] Unresolved external '_STL::basic_ostream<char, _STL::char_traits<char> >& operator <<(_STL::basic_ostream<char, _STL::char_traits<char> >&, const Kset<int>)' referenced from C:\LISTE2\TEMPLATE2\MAIN_T.OBJ



  • schorsch code schrieb:

    2. Wieso plötzlich Kset &kl und nicht mehr const Kset &kl?

    Stimmt ist mir grad gar net aufgefallen. Aber er ist selber Schuld wenn er net mit Fehlermeldungen kommt 😛

    BR



  • template<typename T>
    class Kset{
     //  ...
     template<typename U>
     friend std::ostream & operator<<(std::ostream &, Kset<U> const &);
    };
    // in impl
    template<typename U>
    std::ostream & operator<<(std::ostream & os, Kset<U> const & ks){
       typename Kset<U>::Knoten *ptemp = kl.pFirst;
       for(int anz = kl.Anzahl;  anz != 0; anz--){
          os << ptemp->Inhalt << " ";
          ptemp = ptemp->pNext;
       }
       os << std::endl;
       return os;
    }
    

Anmelden zum Antworten