不能在另一个类的迭代器类中使运算符<<

问题描述 投票:0回答:1

所以,我有ArrayList类,而在内部,我有类迭代器。我尝试了一切在迭代器类中使operator <

而且,我不知道我的问题是否有问题,但是ArrayList是模板类

template <typename T>
std::ostream& operator<<(std::ostream& os, const ArrayList<T>::iterator & it)
{
    return os << *it;
}

template <typename T>
class ArrayList {
private:
    T* elements_;
    size_t size_;
    size_t capacity_;
public:
class iterator;
};

template <typename T>
class ArrayList<T>::iterator {
private:
    T* ptr_;
public:
friend std::ostream& operator<<(std::ostream&, const iterator&);
};
c++ iterator operator-overloading friend ostream
1个回答
0
投票

[ArrayList<T>::iterator是从属名称,因此它必须以typename关键字开头,例如:

template <typename T>
std::ostream& operator<<(std::ostream& os, const typename ArrayList<T>::iterator & it) {
//                                               ^^^
    return os << *it;
}

并且,当然,operator<<重载应在类定义之后定义。

Demo

UPDATE

为了解决注释中提到的链接错误,请尝试将operator<<重载主体直接放置到类主体中,例如:

template <typename T>
class ArrayList<T>::iterator {
private:
    T* ptr_;
public:
    friend std::ostream& operator<<(std::ostream& os, const iterator& it) {
        return os << *it;
    }
};

0
投票

您的operator<<重载应如下所示:

template <typename T>
std::ostream& operator<<(std::ostream& os, const typename ArrayList<T>::iterator & it) {
//                                               ^^^
    return os << *it;
}

并且应该在类声明之后声明。

Demo

© www.soinside.com 2019 - 2024. All rights reserved.