linux c 编译错误 conflicting types for 的解决办法

程序在Windows下运行是OK的,但是放在linux系统gcc编译就会报错。
报错如下:
tongxunlu.c:6:1: error: unknown type name ‘linkman’
linkman *Add(struct linkman *head);
^~~~~~~
tongxunlu.c:6:21: warning: ‘struct linkman’ declared inside parameter list will not be visible outside of this definition or declaration
linkman *Add(struct linkman *head);
^~~~~~~
tongxunlu.c:7:1: error: unknown type name ‘linkman’
linkman *Delete(struct linkman *head);
^~~~~~~
tongxunlu.c:7:24: warning: ‘struct linkman’ declared inside parameter list will not be visible outside of this definition or declaration
linkman *Delete(struct linkman *head);
^~~~~~~
tongxunlu.c:8:1: error: unknown type name ‘linkman’
linkman *Search(struct linkman *head,char name[]);
^~~~~~~

原因及解决方法:

1.函数使用的位置位于声明之前,或未声明函数原型就使用函数;

这种情况往往出现在函数实现文件中,未在头部声明的函数或声明的位置位于函数使用的位置之前;容易忽略的是结构体的定义也需要放在使用位置之前。
2.函数声明的原型中参数或返回类型与函数实现时使用的类型不一致;

在确定调用与实现一致的情况下,将实现部分的函数头拷贝到声明处,即可解决;
3.头文件中的循环引用导致错误;

在a.h中引用了b.h后,又在b.h中引用了a.h,且其中一个头文件中定义了该函数的原型,在编译期对函数原型产生全局化的临时链接变量时,就出现了多个相同 原型声明,导致编译器报错。

#ifndef _A_H_
 
#define _A_H_
 
//其他定义或声明
 
  // ***      
 
#endif

上述写法,也可按如下方式来书写,即头文件名前后多一个下划线:

#ifndef __A_H__
 
#define__A_H__
发布了28 篇原创文章 · 获赞 4 · 访问量 2494

猜你喜欢

转载自blog.csdn.net/weixin_45050042/article/details/102489948