I followed instructions I found on stackoverflow to implement linked list template class, I did it as follows:
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;
}
however I get an error
error: 'Item' was not declared in this scope
I have no idea how as it's friended so I should have access to all private members right?