函数调用结构体指针的时候出现了一个很神奇的情况

struct QNode {
    int* data;
    int front, rear;
};
void Pop(struct Qnode *Q) {

}

这样子不能对Q操作,显示不允许指针指向不完整的类型。

typedef struct QNode* Queue;
void Pop(Queue Q) {

}

这样就可以,这是为什么?

struct QNode
void Pop(struct Qnode *Q)
大小写打错了吗