我正在尝试编写代码来构建堆栈,但是我遇到的编译错误对我来说没有意义。这是我的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
编辑:我发现了错误。我忘记在struct
和Stack
之前添加StackNode
。在这些行上始终拥有struct
可以解决问题。
答案 0 :(得分:4)
变化:
struct Stack {
StackNode* top;
};
为:
struct Stack {
struct StackNode* top;
};
以及其他任何地方使用StackNode
或Stack
,而不是struct
。如果您不想指定struct
,可以使用typedef
。