Почему не работает наследование? с++

Всем здравствуйте!
Пытаюсь реализовать список и стек. Класс список готов, работает, пытаюсь наследовать его для класса стек. Нужно буквально изменить одну лишь функцию удаления.
Код:

template<class ValueType>
class List
{
protected:
    ListNode<ValueType> *head;

public:
    List()
    {
        head = NULL;
    }

    ListNode<ValueType> * listnode_create(ValueType value)
    {
        ListNode <ValueType> * node = new ListNode<ValueType>(value);
        return node;
    }

    void add (ValueType value)
    {
        ListNode<ValueType> *newnode;
        newnode = listnode_create(value);
        newnode->set_next(head);
        head = newnode;
    }

    ListNode<ValueType> *lookup(ValueType value)
    {
        ListNode<ValueType> * find = head;
        while (find->get_value() != value) {
            find = find->get_next();
            if (find == NULL)
                return NULL;
        }
        return find;  
    }

    ListNode<ValueType> *listnode_delete (ValueType value)
    {
        if (head == NULL)
            return NULL;
        ListNode<ValueType> * delete_node = head;
        ListNode<ValueType> * delete_previous = NULL;
        while (delete_node->get_value() != value) {
            delete_previous = delete_node;
            delete_node = delete_node->get_next();
            if (delete_node == NULL)
                return NULL;
        }
        if (delete_node == head)
            head = delete_node->get_next();
        else 
            delete_previous->set_next(delete_node->get_next());
        delete (delete_node);
        return head;
    }

    void print ()
    {
        ListNode<ValueType> * node = head;
        while (node != NULL) {
            cout << node->get_value() << " -> ";
            node = node->get_next();
        }
        cout << "NULL" << endl;
    }
};

Код уже в другом файле:

#include "list.hpp"

template<class ValueType>
class Stack: public List<ValueType>
{

public:
    Stack(): List<ValueType>() {}

    void pop ()
    {
        if (head != NULL) {
            ListNode<ValueType> * delete_node = head;
            head = head->get_next();
            delete (delete_node);
        }
    }

    ListNode<ValueType> *listnode_delete (ValueType value) = delete;
    
};

При компиляции g++ выдаёт:
Ошибка

Объясните, что я делаю не так? Разве head не должна находиться в дочернем классе?


Ответы (1 шт):

Автор решения: Harry

Воспользуйтесь его полностью квалифицированным именем

List<ValueType>::head

Проблема связана с поиском, зависимым от контекста (зависимыми от параметра шаблона именами).

→ Ссылка