我无法将结构传递给一个以结构指针作为参数的函数,并且不断收到错误“错误:一元的无效类型参数'*'(有'StackNode')”
这是我的代码的必要部分(不是全部):
#include <stdio.h>
#include <stdlib.h>
struct stackNode{
char data;
struct stackNode *nextPtr;
};
typedef struct stackNode StackNode;
typedef StackNode *StackNodePtr;
void convertToPostfix(char infix[], char postfix[]);
int isOperator(char c);
int precedence(char operator1, char operator2);
void push(StackNodePtr *topPtr, char value);
char pop(StackNodePtr *topPtr);
char stackTop(StackNodePtr topPtr);
int isEmpty(StackNodePtr topPtr);
void printStack(StackNodePtr topPtr);
int main(){
convertToPostfix(NULL, NULL);
return 0;
}
void convertToPostfix(char infix[], char postfix[]){
StackNode stack = {'(', NULL};
push(*stack, 'a');
printStack(&stack);
}
void push(StackNodePtr* topPtr, char value){
topPtr->nextPtr = NULL; //just temporary, not needed
topPtr->data = value; //just temporary, not needed
}
任何帮助将不胜感激,谢谢
答案 0 :(得分:10)
更改push
来电,push(*stack, 'a')
:
push(&stack, 'a');
^
stack
(*
)上的间接是没有意义的,因为它不是指针。取其地址(&
)确实。
答案 1 :(得分:4)
由于StackNodePtr已经是StackNode的指针,因此参数列表中不需要更多的'*'。
全部替换
void push(StackNodePtr* topPtr, char value){ // WRONG
^^^
到
void push(StackNodePtr topPtr, char value){ // RIGHT
^^^
答案 2 :(得分:0)
我认为你的编译器很聪明。它知道void指针(NULL)与StackNodePtr不同。您需要对调用进行强制转换或者使用null stacknode指针值定义。
NULLSNP=(StackNodePtr)NULL;
正如另一篇帖子所说,推送的呼吁也是错误的,它应该是&amp;不是&amp;。
push(&stack, 'a');
push和pop的定义是错误的,你给它一个stacknodeptr但是期望一个stacknodeptr指针。
void push(StackNodePtr topPtr, char value)
char pop(StackNodePtr topPtr);