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 と同じではないことがわかっています。呼び出しでキャストするか、null スタックノード ポインター値を定義する必要があります。

NULLSNP=(StackNodePtr)NULL;

別の投稿が言ったように、push の呼び出しも間違っています。& ではなく & である必要があります。

push(&stack, 'a');

push と pop の定義が間違っています。

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