我创建了一个名为“list”的抽象类,并且我继承了“list”类来创建队列和堆栈。但是当我试图编译代码时,我得到的错误指出“尾,头,下”不被识别或未知。
#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”类来创建队列和堆栈。但是当我试图编译代码时,我得到的错误指出“尾巴,头部,下一个”未被识别或未知。
错误如下:
..\main.cpp: In member function 'virtual T stack<T>::retrieve()':
..\main.cpp:86:6: error: 'tail' was not declared in this scope
答案 0 :(得分:2)
显式引用基类范围以访问继承的成员变量:
if(list<T>::tail){
// ^^^^^^^^^
list<T>::tail->next = temp;
// ^^^^^^^^^
list<T>::tail = temp;
// ^^^^^^^^^
}
可以选择通过this
进行访问:
if(this->tail){
// ^^^^^^
this->tail->next = temp;
// ^^^^^^
this->tail = temp;
// ^^^^^^
}