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是分开编译的还是包含编译的???
[解决办法]
换编译器