为什么我不能在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;
}
答案 0 :(得分:2)
请注意,rhs
被声明为对const
的引用,然后rhs.v
也将const
,然后rhs.v.begin()
将返回std::vector<U>::const_iterator
1}},无法直接转换为std::vector<U>::iterator
。
所以将其改为
typename vector<U>::const_iterator it = rhs.v.begin();
BTW:void main()
应为int main()
。
答案 1 :(得分:1)
尝试
typename vector<U>::const_iterator it = rhs.v.begin();
如果您的rsh
为const
,则应使用const_iterator