用迭代器重载向量模板的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();

如果您的 rshconst,您应该使用 const_iterator

  1. 注意rhs被声明为对const的引用,那么rhs.v也会是const,那么rhs.v.begin()也会return一个std::vector<U>::const_iterator,不能直接转换成std::vector<U>::iterator

  2. 你应该使用typename for dependent type names.

所以改成

typename vector<U>::const_iterator it = rhs.v.begin();

顺便说一句:void main() 应该是 int main()