This line of code:
front = p; //now front gets p! back should've updated with each enqueue
Does not quite make sense to me. Doesn't your enqueue() take care of all these details already?