Templates und operatoren überladen
-
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; }