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抛出这些错误:

制作(在目录:/home/diego/temp/stack)gcc -g -O2 -std=c99 -c

main.c 在 main.c:4 中包含的文件中:编译失败。堆栈.h:10:

错误:“StackNode”之前的预期说明符限定符列表</p>

stack.h:14: 错误:预期 '='、','、';'、'asm' 或 '<strong>attribute'</p>

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

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

初始化从整数生成指针,没有强制转换:*

[main.o] 错误 1

编辑:我发现了错误。我忘了把struct前面StackStackNode一些行。总是struct在这些线上解决问题。

4

1 回答 1

4

改变:

struct Stack {
    StackNode* top;
};

到:

struct Stack {
    struct StackNode* top;
};

并且在其他任何地方使用StackNodeorStack并且前面没有struct. 如果您不想指定struct,可以使用typedef.

于 2012-08-28T07:47:46.207 回答