GCC编译报错如下:

报错信息

1
Application\APP_Common.h|135|error: conflicting types for 'KeyboardNavigation1'|

原因分析:

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

这种情况往往出现在函数实现文件中,未在头部声明的函数或声明的位置位于函数使用的位置之前;
容易忽略的是结构体的定义也需要放在使用位置之前。

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

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

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

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

1
2
3
4
5
#ifndef _A_H_  //若a.h未被定义过返回真,否则返回假

#define _A_H_ //若上一条语句返回真则重新定义a.h,否则跳过这条语句以及到endif语句之间的语句

#endif

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

1
2
3
#ifndef __A_H__  

#define __A_H__

解决办法

检查是否有以上的3个情况,特别容易出现结构体使用放在了定义前面。