C语言编译error:expected ')' before '*' token解决思路

C语言编译error:expected ')' before '*' token
C/C++ code

/*************************************************************
 *
 * operate BitTree
 *
 ************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct BitNode
{
    char ele;
    struct BitNode *lchild;
    struct BitNode *rchild;
}*BitTree;

typedef struct stack
{
    BitTree BTP;
    struct stack *next;
}*stackP;

int i=0;
//according to picture 6.8
char bitTreeArr[]={'A','B','C','#','#','D','E','#','G','#','#','F','#','#','#'};

void FinOrderTraverse(BitTree p)
{
    if(p!=NULL)
    {
        FinOrderTraverse(p->lchild);
        FinOrderTraverse(p->rchild);
        printf("%c ",p->ele);
    }
}

->void pushInStack(stackp *head,BitTree p)
{
    stackp sp;
    if((sp=malloc(sizeof(struct stack)))==NULL)
    {
        printf("overflow,malloc failed in pushInStack.\n");
        exit(1);
    }
    if(*head==NULL)
    {
        *head=sp;
    }
    else
    {
        sp->next=*head;
        *head=sp;
    }
}

->void popStack(stackp *head,BitTree *p)
{
    stackp sp;
    sp=*head;
    *head=sp->next;
    *p=sp->BTP;
    free(sp);
}

void MidInorderTraverse(BitTree p)
{
    stackP head=NULL;
    while(p!=NULL || head!=NULL)
    {
        if(p)
        {
            pushInStack(&head,p);
            p=p->lchild;
        }
        else
        {
            popStack(&head,&p);
            printf("%c ",p->ele);
            p=p->rchild;
        }
    }
}

void MidOrderTraverse(BitTree p)
{    
    if(p!=NULL)
    {
        MidOrderTraverse(p->lchild);
        printf("%c ",p->ele);
        MidOrderTraverse(p->rchild);
    }
}

void PreOrderTraverse(BitTree p)
{
    if(p!=NULL)
    {
        printf("%c ",p->ele);
        PreOrderTraverse(p->lchild);
        PreOrderTraverse(p->rchild);
    }
}

void createBitTree(BitTree *BT)
{
    if(i<strlen(bitTreeArr))
    {
        if(bitTreeArr[i]=='#')
        {
            *BT=NULL;
            i++;
        }
        else
        {
            if(((*BT)=malloc(sizeof(struct BitNode)))==NULL)
            {
                printf("overflow,malloc failed in createBitTree.\n");
                exit(1);
            }
            (*BT)->ele=bitTreeArr[i];
            i++;
            createBitTree(&(*BT)->lchild);
            createBitTree(&(*BT)->rchild);
        }
    }
    
}

int main()
{
    void createBitTree(BitTree *p);
    void PreOrderTraverse(BitTree p);
    void MidOrderTraverse(BitTree p);
    void FinOrderTraverse(BitTree p);
  ->void pushInStack(stackp *head,BitTree p);
  ->void popStack(stackp *head,BitTree *p);
    void MidInorderTraverse(BitTree p);
    BitTree head;
    createBitTree(&head); //create BitTree
    
    printf("BitTree nodes print in preOrder are:");
    PreOrderTraverse(head); //preOrder traverse BitTree
    printf("\n");
    
    printf("BitTree nodes print in midOrder are:");
    MidOrderTraverse(head); //midOrder traverse BitTree
    printf("\n");
    
    printf("BitTree nodes print in finOrder are:");
    FinOrderTraverse(head); //finOrder traverse BitTree
    printf("\n");
    
    printf("BitTree nodes print in midInOrder are:");
    MidInorderTraverse(head);
    printf("\n");
}



编译时出错
error:expected ')' before '*' token

出错行已在上面标示


------解决方案--------------------
你定义的类型是stackP,而pushInStack和popStack参数是stackp。