"list"という抽象クラスを作成し、 "list"クラスを継承してキューとスタックを作成しました。しかし、私がコードをコンパイルしようとすると、 "tail、head、next"が認識されていない、または未知であることを指摘しているエラーが出ます。テンプレートクラスの継承が不明な変数エラーを返します
#include <iostream>
#include <cstdlib>
using namespace std;
template <typename T>
class list{
public:
T data;
list<T> * head;
list<T> * tail;
list<T> * next;
list(){head = tail = next = NULL;}
virtual ~list(){}
virtual void store(T) = 0;
virtual T retrieve() = 0;
};
// QUEUE
template <typename T>
class queue : public list<T>{
public:
virtual void store(T);
virtual T retrieve();
};
template <typename T>
void queue<T>::store(T d){
list<T> * temp = new queue<T>;
if (!temp) exit(EXIT_FAILURE);
temp->data = d;
temp->next = NULL;
if(tail){
tail->next = temp;
tail = temp;
}
if(!head) head = tail = temp;
}
template <typename T>
T queue<T>::retrieve(){
T i;
list<T> * temp;
i = head->data;
temp = head;
head = head->next;
delete temp;
return i;
}
// STACK
template <typename T>
class stack : public list<T>{
public:
virtual void store(T i);
virtual T retrieve();
};
template <typename T>
void stack<T>::store(T d){
list<T> * temp = new stack<T>;
if(!temp) exit(EXIT_FAILURE);
temp->data = d;
if (tail) temp->next = tail;
tail = temp;
if(!head) head = tail;
}
template <typename T>
T stack<T>::retrieve(){
T i;
list<T> * temp;
i = tail->data;
temp = tail;
tail = tail->next;
delete temp;
return i;
}
int main(){
queue<int> mylist;
for(int i = 0; i < 10; i++)
mylist.store(i);
for(int i = 0; i < 10; i++)
cout << mylist.retrieve() << endl;
}
"list"という名前の抽象クラスを作成し、 "list"クラスを継承してキューとスタックを作成しました。しかし、私がコードをコンパイルしようとすると、 "tail、head、next"が認識されていない、または未知であることを指摘しているエラーが出ます。
誤差は以下である:
..\main.cpp: In member function 'virtual T stack<T>::retrieve()':
..\main.cpp:86:6: error: 'tail' was not declared in this scope
をエラーメッセージを記述して貼り付けないでください。 –