我正在尝试根据带有模板的列表编写队列,但是我有一个奇怪的错误,并且不知道该怎么做。我用Google搜索了这个错误,但我找不到任何对我有用的答案。 对不起我的英语不好。 感谢您的支持。
#include <iostream>
#include <conio.h>
using namespace std;
template<class T>
class Node{
public:
Node(T obj){value=obj; next=NULL;};
Node* next;
T value;
};
template<class T>
class Queue{
Node *top;
Node *bottom;
public:
Queue();
void push(T obj);
T pop();
void print();
~Queue(){ if(next) delete next;};
void delete_queue();
};
template<class T>Queue <T>::Queue(){
top=bottom=NULL;
}
template<class T> void Queue <T>::push(T obj){
Node *newNode= new Node(obj);
if(bottom) bottom->next = newNode;
else { top=newNode; bottom=newNode;}
}
template<class T> T Queue <T>::pop(){
if(top){
Node * del = top;
T val = del-> value;
top=top->next;
delete del;
cout<<"popped "<<val;
return val;
}else {cout<<"Error"; return 0;}
}
void main(){
int n=0, p;
char k;
Queue<int> *a=new Queue<int>();
while(1){
cout<<"1.Push \n";
cout<<"2.Pop \n";
k=getch();
switch(k){
case '1':
cout<<"Enter obj "<<endl;
cin>>p;
cout<<endl;
a->push(p);
break;
case '2':
a->pop();
break;
}
}
}
答案 0 :(得分:1)
使用模板时必须指定模板参数
例如
class Queue{
Node<T> *top;
Node<T> *bottom;
或
template<class T> void Queue <T>::push(T obj){
Node<T> *newNode= new Node<T>(obj);
此外,如果您没有自己定义名称null
,那么如果编译器支持此关键字,我认为您的意思是NULL
甚至更好地使用nullptr
。否则这句话
top=bottom=null;
无效。
函数main也应该有返回类型int。
int main()
目前尚不清楚为什么在堆中分配类Queue而不是简单地将其定义为main的本地对象。例如
Queue<int> a;