首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++primer一个类模板有关问题

2012-02-25 
C++primer一个类模板问题!#include iostreamusing namespace stdtemplate typename Type class Queue

C++primer一个类模板问题!
#include <iostream>
using namespace std;
template <typename Type> class Queue;
template <typename T> ostream& operator<< (ostream&,const Queue<T>&);
template <typename Type> class QueueItem
{
friend class Queue<Type>;
friend ostream& 
operator<< <Type> (ostream&,const Queue<Type>&);

QueueItem(const Type &t):item(t),next(0){}
Type item;
QueueItem *next;
};

template <typename Type> class Queue
{
  friend ostream& 
operator<< <Type> (ostream&,const Queue<Type>&);

private:
  QueueItem<Type> *head;
  QueueItem<Type> *tail;
  void destroy();
  void copy_elems(const Queue&);
public:
  Queue():head(0),tail(0){}
  Queue(const Queue &Q):head(0),tail(0)
{
copy_elems(Q);
}
Queue& operator=(const Queue &Q)
{

destroy();
Queue<Type> *pp=new Queue<Type>(Q);

return *pp;

}
~Queue(){destroy();}

Type& front(){return head->item;}
void push(const Type&);
void pop();
bool empty() const { return head==0;}


};
template <typename Type> 
ostream& operator<<(ostream &os,const Queue<Type> &q)
{
os<< "<";
QueueItem<Type>* p;
for(p=q.head;p;p->next)
{
os<< p->item << " ";
}
os<<">";
return os;
}
template <typename Type> void Queue<Type>::destroy()
{
while(!empty())
pop();
}

template <typename Type> void Queue<Type>::pop()
{
QueueItem<Type>* p=head; //keep pointer to head so we can delete it
head=head->next; //head now points to next element
delete p; //delete old head element
}

template <typename Type> void Queue<Type>::push(const Type &val)
{
QueueItem<Type>* pt =new QueueItem<Type>(val);
if(empty())
head=tail=pt;
else
{
tail->next=pt;
tail=pt;
}
}

template <typename Type> void Queue<Type>::copy_elems(const Queue &orig)
{
for(QueueItem<Type> *pt=orig.head;pt;pt=pt->next)
{
push(pt->item);
}
}

int main()
{
int a=5;
int b=6;
Queue<int> tt,tt1;
tt.push(a);
tt.push(a);
tt1.push(b);
tt1.push(b);
tt1.push(b);
tt=tt1;
cout<<tt; //问题出在输出这一块
return 0;
}
高手们帮忙看看输出问题出在哪里了~

[解决办法]
你用的VC6吧?
[解决办法]
用Dev C++运行没错,换一个版本

C/C++ code
 
#include <iostream>
using namespace std;
template <typename Type> class Queue;
template <typename T> ostream& operator < < (ostream&,const Queue <T>&);
template <typename Type> class QueueItem
{
friend class Queue <Type>;
friend ostream&
operator < < <Type> (ostream&,const Queue <Type>&);

QueueItem(const Type  &t):item(t),next(0){}
Type item;
QueueItem *next;
};

template <typename Type> class Queue
{
    friend ostream&
operator < < <Type> (ostream&,const Queue <Type>&);

private:
  QueueItem <Type> *head;


  QueueItem <Type> *tail;
  void destroy();
  void copy_elems(const Queue&);
public:
  Queue():head(0),tail(0){}
  Queue(const Queue &Q):head(0),tail(0)
{
copy_elems(Q);
}
Queue& operator=(const Queue &Q)
{

destroy();
Queue <Type> *pp=new Queue <Type>(Q);

return *pp;

}
~Queue(){destroy();}

Type& front() {return head->item;}
void push(const Type&);
void pop();
bool empty() const { return head==0;}


};
template <typename Type>
ostream& operator < <(ostream &os,const Queue <Type> &q)
{
os < < " <";
QueueItem <Type>* p;
for(p=q.head;p;p->next)
{
os < < p->item < < " ";
}
os < <">";
return os;
}
template <typename Type> void Queue <Type>::destroy()
{
while(!empty())
pop();
}

template <typename Type> void Queue <Type>::pop()
{
QueueItem <Type>* p=head;  //keep pointer to head so we can delete it
head=head->next;    //head now points to next element
delete p;        //delete old head element
}

template <typename Type> void Queue <Type>::push(const Type &val)
{
QueueItem <Type>* pt =new QueueItem <Type>(val);
if(empty())
head=tail=pt;
else
{
tail->next=pt;
tail=pt;
}
}

template <typename Type> void Queue <Type>::copy_elems(const Queue &orig)
{
for(QueueItem <Type> *pt=orig.head;pt;pt=pt->next)
{
push(pt->item);
}
}

int main()
{
int a=5;
int b=6;
Queue <int> tt,tt1;
tt.push(a);
tt.push(a);
tt1.push(b);
tt1.push(b);
tt1.push(b);
tt=tt1;
cout < <tt;  //问题出在输出这一块
cin.get();
return 0;
}


[解决办法]
LZ是分开编译的还是包含编译的??? 

[解决办法]
换编译器

热点排行