【发布时间】:2014-12-20 19:18:53
【问题描述】:
我按照我在stackoverflow上找到的说明来实现链表模板类,我做了如下:
template<typename T> class List;
template<typename T> std::ostream& operator<<(std::ostream&, const List<T>&);
template<typename T>
class List {
private:
struct Item {
T value;
Item *next;
Item *prev;
Item(const T &value, Item *next, Item *prev)
: value(value), next(next), prev(prev) {
}
};
Item *head;
Item *tail;
int size;
public:
List();
~List();
List(const List&) = delete;
List& operator=(const List &) = delete;
friend std::ostream& operator<< <>(std::ostream&, const List<T>&);
};
template <typename T>
std::ostream& operator<<(std::ostream& os, const List<T>& list) {
Item* p = list.head;
while (p != NULL) {
os << p->value << " ";
p = p->next;
}
return os;
}
但是我得到一个错误
error: 'Item' was not declared in this scope
我不知道它是如何加好友的,所以我应该可以访问所有私人成员,对吧?
【问题讨论】:
-
友元声明 'std::ostream& operator&)' 声明一个非模板函数
-
是的,没关系:-S
-
列表类型要么是
typename List<T>::Item,要么你可以说:for (auto p = list.head; p; p = p->next) { os << p->value << " "; }
标签: c++ templates private friend