我跟着我的計算器發現來實現鏈表模板類的指令,我做到了,如下所示:ostream的<<操作符與模板類,不能訪問私有成員
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的和運營商<<(STD :: ostream的和,常量列表&)' 聲明一個非模板函數 –
user3758262
呀,你別管了-S –
列表類型爲類型名'列表 :: Item',或者你可以說:for(auto p = list.head; p; p = p-> next){os << p-> value <<「」; }' –