Почему я не могу использовать итератор при перегрузке Ostream?Перегрузка потока векторного шаблона с помощью итератора
Если я использую ту же декларацию, используя итеративный подход, она работает.
Рассмотрим следующий код:
template <class T>
class List {
template <class U>
friend ostream &operator<<(ostream &os, const List<U> &rhs);
private:
vector<T> v;
};
template<class U>
ostream & operator<<(ostream & os, const List<U>& rhs)
{
vector<U>::iterator it = rhs.v.begin();
return os;
}
int main()
{
List<int> list;
cout << list << endl;
return 0;
}
Если C++ 11 доступен для вашей целевой платформы, вам может потребоваться объявить тип итератора как 'auto', поэтому компилятор может вывести правильный тип для вас. В обоих смыслах слова гораздо легче печатать. –