#ifndef MYLIST_H
#define MYLIST_H
#include <iostream>
#include <vector>
using namespace std;
template <typename F>
class Node {
public:
template <typename T>
friend class myList;
Node(F data = F(), Node<F>* pPrev = nullptr, Node<F>* pNext = nullptr) : data(data), pPrev(pPrev), pNext(pNext) {};
private:
F data;
Node<F>* pNext;
Node<F>* pPrev;
};
template<typename T>
class myList {
public:
myList();
~myList();
void push_back(T);
void push_front(T);
void pop_back();
void pop_front();
void remove_if(bool (&f)(T));
void even_then_uneven();
void cycle_delete(int k);
int getSize() const;
void output() const;
public:
Node<T>* head;
Node<T>* tail;
int size;
void push(Node<T>*, T);
void pop(Node<T>*);
};
// Определение всех методов базового класса
// ...
template<typename T>
class Cycled_List: public myList<T> {
public:
void foo() {
tail = head = nullptr;
cout << "Success";
}
};
#endif
Есть вот такой фрагмент кода. Вопрос состоит в том, что при попытке вызова из мейна метода foo() класса сycled_list компилятор (g++) ругается на то, что tail и head "wasn't declared in this scope". Проблема решается, если явно указать в какой области видимости находятся tail и head, но, понятно, что это это не очень приятно и вроде бы должно работать не так. Почему не получается неявно найти, что head и tail это поля базового класса?