己写的Queue类循环的,push()函数有点有关问题

己写的Queue类循环的,push()函数有点问题
#include <iostream>

using   namespace   std;
template <class   T>
struct   Node
{
        T   data;
        Node <T>   *next;
};

template <class   T>
class   Queue
{
        public:
                Queue(){rear   =   NULL;};
                Queue(Queue   &x);
                ~Queue();
                bool   empty(){return   rear   ==   NULL;};
                T   Front();
                T   Top();
                void   push(const   T   x);
                void   pop();
                void   operator   =   (Queue   &x);
        private:
                Node <T>   *rear;
};
template <class   T>
Queue <T> ::Queue(Queue   &x)
{
        while(!x.empty())
        {
                push(x.Front());
                x.pop();
        }
}
template <class   T>
Queue <T> ::~Queue()
{
        while(!empty())
        {
                pop();
        }
}
template <class   T>
void   Queue <T> ::operator   =(Queue   &x)
{
        while(!x.empty())
        {
                push(x.Front());
                x.pop();
        }
}
template <class   T>
void   Queue <T> ::push(const   T   x)
{
        Node <T>   *p   =   new   Node <T> ;
        p-> data   =   x;
        p-> next   =   NULL;
        if(!empty())
        {
                p-> next   =   rear-> next;  
                rear-> next   =   p;
                rear   =   p;
        }
        else
        {
                rear   =   p;
                rear-> next   =   rear;
        }
}
template <class   T>
void   Queue <T> ::pop()
{
        if(!empty())
        {
                Node <T>   *p;