Good day. I am writing my vector. It is necessary to overload the above operators. Vector.h

class Vector { // ... template<typename T1> friend std::ostream& operator<< (std::ostream&, Vector<T>&); // ... }; template<typename T> std::ostream& Vector<T>::operator << (std::ostream& os, Vector<T>& v) { for(int i=0;i<v.size();i++) { os << v.at(i) << " "; } return os; } 

It gives the following error:

 'std::ostream Vector<T>::operator<<(std::ostream, const Vector<T>&)' must take exactly one argument std::ostream Vector<T>::operator << (std::ostream output, Vector<T> const& v) ^ 

    1 answer 1

    Find the 4 differences:

      friend std::ostream& operator << (std::ostream&, Vector<T> &); template<typename T> std::ostream Vector<T>::operator << (std::ostream os, Vector<T> &v) 
    • Corrected. Error remained template<typename T1> friend std::ostream& operator<< (std::ostream&, Vector<T1>&); template<typename T> std::ostream& Vector<T>::operator << (std::ostream& output, Vector<T>& v) template<typename T1> friend std::ostream& operator<< (std::ostream&, Vector<T1>&); template<typename T> std::ostream& Vector<T>::operator << (std::ostream& output, Vector<T>& v) - sm4ll_3gg
    • one
      @ sm4ll_3gg you found not all the differences. By the way, in the class to write the template either it is not necessary, or it is necessary to write something like template<> - because T is already announced. - Pavel Mayorov