Совершенно новый вопрос, совершенно новый ответ:
Я думаю, что вы захотите вот так:
template <class T>
class lw_slist {
// .... some code
private:
struct slist_cell {
slist_cell *next;
T data;
};
slist_cell *root;
};
Нет причин использовать typedef: C ++ создает классыи автоматически создает часть пространства имен.
Нет причин использовать lw_slist :: slist_cell, поскольку slist_cell уже находится в текущем пространстве имен.
Причина, по которой вы получили ошибку dependent name is not a type
в том, что внутри объявления шаблона C ++ не может определить, должен ли lw_slist<T>::slist_cell
быть типом или переменной.Предполагается переменная с именем slist_cell
, и вы должны использовать typename
, чтобы сказать иначе.