2012-05-12 148 views
1

我在将结构传递给一个将结构指针作为参数的函数时遇到问题,并且不断收到错误“错误:一元'的无效类型参数*'(' StackNode')”将结构指针传递给函数C

这里是我的代码(必要的部分不是全部的话):

#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 
} 

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

回答

10

更改push电话,push(*stack, 'a')

push(&stack, 'a'); 
    ^

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

+0

谢谢您的回答,这个工程只要我从我的push方法去除多余的*,但是是 – nain33

0

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

NULLSNP=(StackNodePtr)NULL; 

正如另一篇文章说,推电话也错了,应该是&不&。

push(&stack, 'a'); 

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

void push(StackNodePtr topPtr, char value) 
char pop(StackNodePtr topPtr); 
+0

其实用C'NULL'能被分配给任何指针:初始化器没问题。 – cnicutar

4

由于StackNodePtr已经是一个指向StackNode的指针,所以在参数列表中不需要更多'*'。

更换所有

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

void push(StackNodePtr topPtr, char value){ // RIGHT 
        ^^^ 
+0

是的,你是对的,而** cnicutar **注意到,** nain33 **试图解引用结构,而不是得到一个指针:) – tonytony