make 编译时提示 conflicting types for 错误的解决办法


make 编译时提示 conflicting types for 错误的解决办法

编译时错误提示:

1
2
3
error: conflicting types for xxx

error: previous implicit declaration of xxx was here

原因与解决办法:

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

这种情况往往出现在函数实现文件中,未在头部声明或声明的位置位于函数使用的位置之后;

解决办法:

将函数声明放到文件靠前位置;

  • 函数声明的原型中参数或返回类型与函数实现时使用的类型不一致;

解决办法:

在确定调用与实现一致的情况下,将实现部分的函数头拷贝到声明处,即可解决;

  • 头文件中的循环引用导致错误;

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

解决办法:

在h文件头部加入防循环引用的宏定义,如 a.h 中加入:

1
2
3
4
5
6
7
8
9
#ifndef _A_H_

#define _A_H_

//其他定义或声明

// ***

#endif