这是自学过程设计队列,这里是代码
#include <iostream>
using namespace std;
template <class T>
class Queue{
public:
T * q;
int n, head, tail;
public:
Queue(int maxn){
q=new T[maxn+1];
n=maxn+1; head=n;
tail=0;
}
int emty() const {
return ((head%n)==tail);
}
void put(T k){
a[tail++]=k; tail=tail%n;
}
T get(){
head=head%n; return q[head++];
}
};
template <class T>
int main(){
Queue<int>a(10);
a.put(13);
a.put(45);
a.put(12);
a.put(10);
a.put(30);
a.put(45);
while(!a.emty()){
cout<<a.get()<<" ";
}
return 0;
}
这是错误
1>------ Build started: Project: QUEUE, Configuration: Debug Win32 ------
1>MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
1>D:\c++_algorithms\QUEUE\Debug\QUEUE.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
请帮助
答案 0 :(得分:3)
main
函数不能是模板。只需删除它前面的template <class T>
即可删除编译错误。
答案 1 :(得分:0)
定义这样的主要功能:int main()
。这是一个特殊的功能,在开始时运行,你不能改变它的签名。
答案 2 :(得分:0)
q=new T[maxn+1];
n=maxn+1;
head=n;
tail=0;
您创建一个类型为T的数组,其大小为maxn + 1
你最多只能使用0;
设置head = maxn+1
可能会导致问题,因为这是数组的'\ 0'
此外,
void put(T k)
{
a[tail++]=k;
tail=tail%n;
}
你在这里做的有点奇怪。你在[tail]上分配值k,然后将尾部增加1,然后你将尾部k的余数分配给maxn + 1,如果我没有弄错的话,它总是与尾部相同?这不是多余的吗?想象一下尾巴是2,maxn是15,2%15 = 2.一般来说,你的整个方法有点奇怪。
也许你应该做一些数据结构研究。查找链接列表。对这样的结构使用数组并没有错,但也不正确。阵列装满后会发生什么?在那之后你将如何跟踪阵列上所有新插入的元素(假设你留出空间)以及你将如何知道哪些可以自由插入新东西?
答案 3 :(得分:0)
不要重新发明轮子,你应该使用std队列。
答案 4 :(得分:0)
#include<iostream>
using namespace std;
template < class type > class que {
private:
type arr[10000];
int front, rear;
public:
que() {
front = 0;
rear = 0;
}
void insertion(type data) ;
type deletion();
};
template<class type> type que<type>:: deletion() {
cout<<front<<endl;
return arr[front++];
}
template<class type> void que<type>:: insertion(type data) {
cout<<rear<<" r"<<endl;
arr[rear++] = data;
}
int main() {
que<int> q;
q.insertion(12);
q.insertion(23);
q.insertion(22222);
cout<<q.deletion()<<endl;
cout<<q.deletion()<<endl;
cout<<q.deletion()<<endl;
}