Ошибка довольно очевидна: не используйте имя Node
. Вместо этого вы можете написать что-то вроде этого:
typedef Node<T> node_type;
Имена шаблонов и имена типов имеют одно и то же пространство имен в C ++, поэтому вы не можете использовать одно и то же имя для двух разных сущностей, даже если один является шаблоном, а другой - типом.
(Несколько странно, что имена тегов как в C, так и в C ++ содержат немало тонкостей; эта статья может стоить прочтения, а this и это .)