我已经尝试了一切,我不明白为什么它不起作用。
g++ 抛出:
Queue.H:53:错误:将“operator<<”声明为非函数
Queue.H:53:错误:预期 â;â 在â<â 标记之前
Queue.H:59:错误:预期 â;â 在“private” 之前
代码是:
#ifndef _Queue_H_
#define _Queue_H_
#include <iostream>
#include <string>
using namespace std;
template <class T, int size>
class Queue
{
public:
Queue():_Num(0){
T Arr=new T[size];
for(int i=0;i<size;i++)
Arr[i]=0;}
~Queue(){
for (int i=0;i<_Num;i++)
delete Arr_[i];
delete [] Arr_;
}
bool IsEmpty() const{return !_Num ;}
bool IsFull() const{return (_Num==size);}
void count() const{return _Num;}
T& Top() const {
if(!IsEmpty())
return Arr_[0];
else
throw("empty");
}
void operator << (const T & item ) {
if(!IsFull()){
Arr_[_Num+1]=item;
_Num++;}
else
throw("full");}
T operator >> (T & item) {
if(IsEmpty())
throw("empty");
item=Arr_[0];
delete Arr_[0];
for(int i=1;i<_Num;i++)
Arr_[i-1]=Arr_[i];
_Num--;
return item;}
T operator [] (const T &number){
return (number<size) ?Arr_[number]:throw("overload");}
friend ostream & operator << <T,size>(ostream & or ,const Queue<T,size> &a){
for(int i=0;i<a._Num;i++)
or<<a.Arr_[i];
return or;
}
private:
T Arr_[size];
int _Num;
};