1

我在将结构传递给以结构指针作为参数的函数时遇到问题,并不断收到错误“错误:一元'*'的无效类型参数(具有'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
}

任何帮助将不胜感激,谢谢

4

3 回答 3

10

更改push呼叫,push(*stack, 'a')

push(&stack, 'a');
     ^

stack( )上的间接引用*没有意义,因为它不是指针。取其地址 ( &) 即可。

于 2012-05-12T07:16:06.960 回答
4

由于 StackNodePtr 已经是指向 StackNode 的指针,因此您不需要在参数列表中添加更多的 '*'。

全部替换

void push(StackNodePtr* topPtr, char value){ // WRONG
                     ^^^

void push(StackNodePtr topPtr, char value){ // RIGHT
                     ^^^
于 2012-05-12T07:43:12.363 回答
0

我认为你的编译器很聪明。它知道 void 指针 (NULL) 与 StackNodePtr 不同。您需要对调用进行强制转换或空堆栈节点指针值的定义。

NULLSNP=(StackNodePtr)NULL;

正如另一篇帖子所说,对 push 的调用也是错误的,应该是 & 不是 &。

push(&stack, 'a');

push 和 pop 的定义是错误的,你给它一个 stacknodeptr 但期望一个 stacknodeptr 指针。

void push(StackNodePtr topPtr, char value)
char pop(StackNodePtr topPtr);
于 2012-05-12T07:18:18.933 回答