我构建了一个堆栈数据结构,它有一个peek
方法。在main中调用warning: initialization makes pointer from integer without a cast
时,编译器会给我peek
警告。这就是我所拥有的:
stack.h
:
struct stack_elem {
struct stack_elem *next;
};
struct stack {
struct stack_elem *top;
};
void stack_init(struct stack *stack);
int isEmpty(struct stack *);
struct stack_elem * peak(struct stack *);
及其实施:
void stack_init(struct stack *stack) {
stack->top = NULL;
}
int isEmpty(struct stack *stack) {
if (stack->top == NULL)
return 1;
else
return 0;
}
struct stack_elem * peek(struct stack *stack) {
if (isEmpty(stack) == 1)
return NULL;
else
return stack->top;
}
在我的main.c
中,我按如下方式定义堆栈:
struct stack stack;
stack_init(&stack);
并致电peek:
struct stack_elem * elem = peek(&stack);
此行抛出警告。这里奇怪的是我曾经将stack.c
导入main.c
并使用$ gcc main.c
进行编译。这绝对没有错误。现在我将导入更改为stack.h
,并且我正在编译$ gcc main.c stack.c
,它会抛出警告。运行它也是段错误(事先没有)。
答案 0 :(得分:3)
看起来peek()没有在.h中声明,所以编译器假设它是一个int。 main()调用它假设它是一个指针返回类型。
警告100%正确!
答案 1 :(得分:3)
在我的头文件中有一个拼写错误?
struct stack_elem * peak(struct stack *);
"巅峰",您的实施内容为" peek"。但是,不知道这是否会引起这样的警告。
答案 2 :(得分:2)
变化:
struct stack_elem * peak(struct stack *);
要:
struct stack_elem * peek(struct stack *);
:)