Почему не работает наследование? с++
Всем здравствуйте!
Пытаюсь реализовать список и стек. Класс список готов, работает, пытаюсь наследовать его для класса стек. Нужно буквально изменить одну лишь функцию удаления.
Код:
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;
};
Объясните, что я делаю не так? Разве head не должна находиться в дочернем классе?
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Воспользуйтесь его полностью квалифицированным именем
List<ValueType>::head
Проблема связана с поиском, зависимым от контекста (зависимыми от параметра шаблона именами).
