Template Klasse, überladen des << Operators - Fehler
-
Hallo,
ich bekomme vom Compiler eine Fehlermeldung die ich nicht zuordnen kann:
"error: 'std::ostream& Vectors<N, T>::operator<<(std::ostream&, const Vectors<N, T>&)' must take exactly one argument"Hier meine Klasse:
template <std::size_t N=3, typename T=float> class Vectors { private: T values[N]; public: Vectors(); T& operator[] (std::size_t idx); std::ostream& operator<< (std::ostream& stream, const Vectors<N,T>& vec); }; ... template <std::size_t N, typename T> std::ostream& Vectors<N,T>::operator<< (std::ostream& stream, const Vectors<N,T>& vec){ std::ostream << '('; for(std::size_t i = 0; i < N; ++i){ std::ostream << vec[i]; } std::ostream << ')'; return stream; }Wäre klasse, wenn mir jemand meinen Fehler erklären könnte, ich steh da am Schlauch

-
Greetings!
Du musst den Operator als freie Template-Funktion im selben namespace wie die Klasse umsetzen. Schließlich soll der Stream ja auf der "linken" Seite stehen. Als Member kann der Operator bloß ein rhs-Argument nehmen.