重载矢量模板的ostream与迭代器

时间:2017-02-15 15:27:30

标签: c++ templates operator-overloading ostream

为什么我不能在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;
}

2 个答案:

答案 0 :(得分:2)

  1. 请注意,rhs被声明为对const的引用,然后rhs.v也将const,然后rhs.v.begin()将返回std::vector<U>::const_iterator 1}},无法直接转换为std::vector<U>::iterator

  2. 您应该typename使用dependent type names

  3. 所以将其改为

    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();

如果您的rshconst,则应使用const_iterator