所以,我有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&);
};
[ArrayList<T>::iterator
是从属名称,因此它必须以typename
关键字开头,例如:
template <typename T>
std::ostream& operator<<(std::ostream& os, const typename ArrayList<T>::iterator & it) {
// ^^^
return os << *it;
}
并且,当然,operator<<
重载应在类定义之后定义。
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;
}
};
您的operator<<
重载应如下所示:
template <typename T>
std::ostream& operator<<(std::ostream& os, const typename ArrayList<T>::iterator & it) {
// ^^^
return os << *it;
}
并且应该在类声明之后声明。