错误:之前的预期说明符限定符列表

时间:2012-08-28 07:44:31

标签: c

我正在尝试编写代码来构建堆栈,但是我遇到的编译错误对我来说没有意义。这是我的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:编译失败。 stack.h:10:

     

错误:'StackNode'之前的预期说明符限定符列表

     

stack.h:14:错误:预期'=',',',';','asm'或'属性'

     

在'*'之前标记main.c:在函数'main'中:main.c:8:warning:

     

函数'new_stack'main.c的隐式声明:8:警告:

     

初始化使得整数指针没有强制转换make: *

     

[main.o]错误1

编辑:我发现了错误。我忘记在structStack之前添加StackNode。在这些行上始终拥有struct可以解决问题。

1 个答案:

答案 0 :(得分:4)

变化:

struct Stack {
    StackNode* top;
};

为:

struct Stack {
    struct StackNode* top;
};

以及其他任何地方使用StackNodeStack,而不是struct。如果您不想指定struct,可以使用typedef