这个c语言指针为什么不能转换啊,求解释。

#include
#include
typedef int QElemType;
typedef int Status;
typedef struct QNode {
QElemType data;
struct Qnode next;
}QNode,*QueuePtr;
typedef struct {
QueuePtr front;
QueuePtr rear;
}LinkQueue;
Status InitQueue(LinkQueue *Q)
{
Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q->front)exit(0);
Q->front=NULL;
return 1;
}
Status EnQueue(LinkQueue *Q,QElemType e)
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
p->data=e;
p->next=NULL;
Q->rear->next=p;/
这个为什么报错?--------------------*/
Q->rear=p;
return 1;
}

一个是LinkQueue类型,一个是QueuePtr类型,两个类型直接转换肯定不行啊