C语言编译error:expected ')' before '*' token解决思路
C语言编译error:expected ')' before '*' token
编译时出错
error:expected ')' before '*' token
出错行已在上面标示
------解决方案--------------------
你定义的类型是stackP,而pushInStack和popStack参数是stackp。
- 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。