0

教科書の作成者から提供されたコードを使用してプログラムを作成しようとしていますが、ファイルを使用するプログラムをコンパイルしようとすると、すべてのメソッドで「不完全なタイプへのポインターの間接参照」エラーが発生します。以下はコードです。この作者のコードを修正して機能させる方法を知っている人はいますか?

#include <stdio.h>
#include <stdlib.h>
#include "StackADT.h"
#define STACK_SIZE 100

struct stackType {
    int contents[STACK_SIZE];
    int top;
};

static void terminate(const char *message) {
    printf("%s\n", message);
    exit(EXIT_FAILURE);
}

Stack create(void) {
    Stack s = malloc(sizeof(struct stackType));

    if (s == NULL) {
        terminate("Error: Stack could not be created");
    }

    s->top = 0;
    return s;
}

void destroy(Stack s) {
    free(s);
}

void makeEmpty(Stack s) {
    s->top = 0;
}

bool isEmpty(Stack s) {
    return s->top == 0;
}

bool isFull(Stack s) {
    return s->top == STACK_SIZE;
}

void push(Stack s, Item i) {
    if (isFull(s)) {
        terminate("Error: Stack is full");
    }

    s->contents[s->top++] = i;
}

int pop(Stack s) {
    if (isEmpty(s)) {
        terminate("Error: Stack is empty");
    }

    return s->contents[--s->top];
}

エラー:

StackADT.c: In function 'create':
StackADT.c:29: error: dereferencing pointer to incomplete type
StackADT.c: In function 'makeEmpty':
StackADT.c:38: error: dereferencing pointer to incomplete type
StackADT.c: In function 'isEmpty':
StackADT.c:42: error: dereferencing pointer to incomplete type
StackADT.c: In function 'isFull':
StackADT.c:46: error: dereferencing pointer to incomplete type
StackADT.c: In function 'push':
StackADT.c:54: error: dereferencing pointer to incomplete type
StackADT.c:54: error: dereferencing pointer to incomplete type
StackADT.c: In function 'pop':
StackADT.c:62: error: dereferencing pointer to incomplete type
StackADT.c:62: error: dereferencing pointer to incomplete type
4

2 に答える 2

1

typedef struct stackType *Stack;最初の関数定義の前に押し込んでみて、それで修正されるかどうかを確認してください。

于 2012-11-25T06:31:44.537 に答える
1

以前に宣言されたポインタ型Stackをの同義語として使用していますstruct stackType *。実際Stackにはとは関係ありませんstruct stackType *。YourStackは、の同義語として宣言されています。SomeOtherType *ここで、SomeOtherTypeは不完全なタイプです。

Stackあなたの宣言はどこにありますか?それは何と言っていますか?

于 2012-11-25T06:46:58.440 に答える