首页 > 解决方案 > 错误:“push”的参数 1 的类型不兼容

问题描述

我正在尝试构建一个链接列表,但我无法传递错误。有人可以帮助我了解发生了什么?我已经改变了结构的类型,但没有任何改变。

我正在尝试构建一个链接列表,但我无法传递错误。有人可以帮助我了解发生了什么?我已经改变了结构的类型,但没有任何改变。

/*gcc -o lista.exe lista.c -Wall -pedantic -Wextra*/
#include <stdio.h>
#include <stdlib.h>

struct list
{
  int info;
  struct list *next;
};

void push(struct list, int);

int main(int argc, char *argv[])
{
  struct list *list;

  argc = argc;
  argv = argv;

  /*Start list*/
  list = (struct list *)malloc(sizeof(struct list));
  list->info = 5;
  list->next = NULL;

  push(&list, 70);

  return 0;
}

void push(struct list **list, int info)
{
  struct list *new;
  new = (struct list *)malloc(sizeof(struct list));
  new->info = info;
  new->next = NULL;

  *list->next = new;
}
lista.c: In function 'main':
lista.c:25:3: error: incompatible type for argument 1 of 'push'
lista.c:11:6: note: expected 'struct list' but argument is of type 'struct list **'
lista.c: At top level:
lista.c:30:6: error: conflicting types for 'push'
lista.c:11:6: note: previous declaration of 'push' was here
lista.c: In function 'push':
lista.c:37:8: error: request for member 'next' in something not a structure or union

标签: cstructcompiler-errorslinked-listsingly-linked-list

解决方案


您的函数原型/声明push与您的函数定义不匹配push。在顶部,更改

void push(struct list, int);

void push(struct list**, int);

或者,您可以删除函数原型push并将其定义移到上面main。编译器从上到下读取文件,因此在main您调用 时push(&list, 70);,如果编译器不知道与该签名匹配的函数,它会报错。由于您的原型是错误的,它没有看到与返回类型匹配的void函数struct list**, int,因此它会生成您看到的错误。

顺便说一句,我假设你有

argc = argc;
argv = argv;

抑制未使用变量的警告。如果您不打算使用argcor argv,您可以将您的main签名更改为int main(void){ ... }并完全丢弃它们。


推荐阅读