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.


Anmelden zum Antworten