2012-05-12 182 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