用迭代器重载向量模板的ostream
Overloading ostream of vector template with iterator
为什么我不能在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;
}
试试
typename vector<U>::const_iterator it = rhs.v.begin();
如果您的 rsh
是 const
,您应该使用 const_iterator
注意rhs
被声明为对const
的引用,那么rhs.v
也会是const
,那么rhs.v.begin()
也会return一个std::vector<U>::const_iterator
,不能直接转换成std::vector<U>::iterator
你应该使用typename for dependent type names.
所以改成
typename vector<U>::const_iterator it = rhs.v.begin();
顺便说一句:void main()
应该是 int main()
。
为什么我不能在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;
}
试试
typename vector<U>::const_iterator it = rhs.v.begin();
如果您的 rsh
是 const
,您应该使用 const_iterator
注意
rhs
被声明为对const
的引用,那么rhs.v
也会是const
,那么rhs.v.begin()
也会return一个std::vector<U>::const_iterator
,不能直接转换成std::vector<U>::iterator
你应该使用typename for dependent type names.
所以改成
typename vector<U>::const_iterator it = rhs.v.begin();
顺便说一句:void main()
应该是 int main()
。