Есть несколько проблем с этим кодом, во-первых, следующий член Node не имеет определенного типа шаблона, обычно в этом случае, если вы хотите создать связанный список одного универсального типа, вы должны сделать что-то вроде Node<t>* next
. Вторым является тот факт, что вы назначаете то, что кажется Узлом *, Узлу *.
Если вы пытаетесь создать связанный список разных типов, вы не сможете сделать это таким образом. Проще говоря, причина в том, что вы должны передать тип для аргумента t
, и поэтому каждый узел должен иметь определенный тип. Назначение шаблонных классов состоит не в том, чтобы позволить пользователю выделять какой-либо универсальный тип, а в упрощении повторяющейся реализации класса, позволяя передавать тип в качестве параметра. Например: List<int>
против List<char>
просто избавляет вас от необходимости создавать IntList
класс и CharList
класс.
Если вы хотите, чтобы поведение динамически размещаемых типов в одном и том же массиве сохранялось, это не так просто. Я бы порекомендовал взглянуть на типы c ++ 17 std::any
и std::variant
или, если более старая версия языка, типы boost boost::any
и boost::variant
из библиотеки boost. Другие способы сделать это без стандартных библиотек - использовать полиморфизм или void*
.