私はすべてを試しましたが、なぜ機能しないのか理解できません。
g++ スロー:
Queue.H:53: エラー: 「operator<<」 を非関数として宣言
Queue.H:53: エラー: 予期される â;â before â<â トークン
Queue.H:59: エラー: 「プライベート」の前に「」が必要です
コードは次のとおりです。
#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;
};