1

スタックを構築するコードを記述しようとしていますが、意味をなさないコンパイル エラーが発生します。これが私のものstack.hです:

struct StackNode {

    void* previous;
    int   value;
};


struct Stack {

    StackNode* top;
};


Stack* new_stack () {

    StackNode stn = { NULL, 0 };
    Stack* st  = (Stack*) malloc(sizeof(Stack));
    st->top = NULL;
    return st;
}

そして私のmain.c

#include <stdio.h>
#include <stdlib.h>

#include "stack.h"

int main () {

    struct Stack* st = new_stack();

    return 0;

}

gccこれらのエラーをスローします:

make (ディレクトリ: /home/diego/temp/stack) gcc -g -O2 -std=c99 -c

main.c main.c:4 からインクルードされたファイル: コンパイルに失敗しました。スタック.h:10:

エラー: 'StackNode' の前に指定子修飾子リストが必要です</p>

stack.h:14: エラー: '='、','、';'、'asm' または '<strong>属性'</p> が必要です

'*' トークンの前 main.c: 関数 'main' 内: main.c:8: 警告:

関数 'new_stack' main.c:8 の暗黙的な宣言: 警告:

初期化により、キャストを使用せずに整数からポインターが作成されます。 make: *

[main.o] エラー 1

編集:エラーが見つかりました。structStackStackNodeいくつかの行に入れるのを忘れました。常にstructこれらの行を使用すると、問題が解決します。

4

1 に答える 1

4

変化する:

struct Stack {
    StackNode* top;
};

に:

struct Stack {
    struct StackNode* top;
};

およびそれ以外の場所ではStackNodeorStackが使用され、前に が付きませんstruct。指定したくない場合structは、typedef.

于 2012-08-28T07:47:46.207 に答える