c2955 - 使用类模板 reuires 参数列表.队列
c2955 - Use of Class template reuires argument list. Queue
我正在尝试根据带有模板的列表编写队列,但是我有一个奇怪的错误,并且不知道该怎么办。我在谷歌上搜索了这个错误,但我没有找到任何对我有用的答案。对不起我的英语。感谢您的支持。
#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;
}
}
}
使用模板时必须指定模板参数
例如
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()
并且不清楚为什么在堆中分配类队列,而不是简单地将其定义为 main 的本地对象。例如
Queue<int> a;
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- 在派生函数中指定void*参数
- 视图中的参数推导失败:take_while
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 使用指向成员的指针将成员函数作为参数传递
- c2955 - 使用类模板 reuires 参数列表.队列
- c2955 错误 - 使用类模板 reuires 参数列表