Итак, я пытаюсь создать класс стека, который наследует функции-члены из класса связанного списка. Класс связанного списка не имеет собственной реализации; по сути это абстрактный виртуальный класс. Оба являются шаблонными классами. Когда я пытаюсь получить доступ к функции-члену, используя мой производный класс стека, я получаю сообщение об ошибке «Нет функции-члена, объявленной в классе« Стек »». Ниже мой код. Я не уверен, в чем проблема. Я включил имена файлов .h, а также последовательность :public List в объявление класса стека. Пожалуйста помоги! Если для ответа на этот вопрос вам потребуется еще какой-либо код, пожалуйста, дайте мне знать! Спасибо!
Код для объявления родительского класса List
#ifndef LIST221_H
#define LIST221_H
#include "Node221.h"
template <typename T>
class List221 {
public:
List221();
~List221();
virtual int size() const;
virtual bool empty() const;
virtual bool push(T obj); //will push in a new node
virtual bool pop(); //will pop off the top node
virtual bool clear();
protected:
private:
Node<T>* front;
Node<T>* rear;
};
#endif
Код объявления класса Stack. Включает файл List.h
#include "List221.h"
#include "Node221.h"
template <typename T>
class Stack221 : public List221 <T> {
public:
Stack221();
~Stack221();
T top();
private:
Node<T>* topnode;
};
Пример функции-члена из класса List, к которому я пытаюсь получить доступ. Также включает List.h вверху страницы
template <typename T>
bool Stack221<T>::push(T obj) {
Node<T>* o = new Node(obj);
if (topnode == nullptr) {
topnode = o;
}
else {
o->next = topnode;
topnode = o;
}
return true;
}
Отображается ошибка
error: no ‘bool Stack221<T>::push(T)’ member function declared
in class ‘Stack221<T>’
bool Stack221<T>::push(T obj) {
^
Я ничего не вижу о bool Stack221<T>::clear() в вашем примере (проверьте отображаемую ошибку в вашем фрагменте кода)





Похоже, вы предоставили реализацию Stack221<T>::push, но не объявили этот метод в объявлении своего класса.
Функция push предназначена для наследования от родительского класса. Разве не должно быть необходимости в объявлении в производном классе?
Если вы предоставляете реализацию, вы должны предоставить декларацию. Если вы хотите наследовать метод от родительского класса, почему вы предоставляете реализацию выше?
минимальный воспроизводимый пример поможет, мы не знаем, как был объявлен родительский класс.