c - 错误:“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
解决方案
您的函数原型/声明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;
抑制未使用变量的警告。如果您不打算使用argc
or argv
,您可以将您的main
签名更改为int main(void){ ... }
并完全丢弃它们。
推荐阅读
- aws-lambda - AWS Lambda API 在 POST 请求中给出 502 错误
- java - 如何识别数据是否在硒中显示
- jenkins - 如何从另一个管道评估詹金斯管道状态
- apache-spark - 我应该在 Spark DataFrame 上应用什么转换
- python - 从熊猫列中提取最低和最高日期
- sql - SQL ORACLE 创建现有表柱形图
- reactjs - 将快速路由中的响应数据 (res.json) 传递给 react axios post 方法
- youtube-api - Youtube api 未在较新的 android 设备上加载 YouTubePlayerView
- sql - Oracle 从另一个表插入数据,没有列名
- java - 在 Eclipse Luna 上打开 Java 导入类时找不到源