首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

【IAR】定义结构体出现的异常Error[e27]: redefined in module

2013-09-05 
【IAR】定义结构体出现的错误Error[e27]: redefined in module想定义两个结构体,在WARN.h 文件中定义结构体,

【IAR】定义结构体出现的错误Error[e27]: redefined in module
    想定义两个结构体,在WARN.h 文件中定义结构体,然后再WARN.c文件中使用:
    
ER_WARN.Span=0x0000;ER_WARN.Span=0x0000;等,

结构编译器报错:Error[e27]: Entry "ER_WARN" in module AD ( C:…… ) redefined in module FINGERPRINT (…… ) 


我就纳闷了,在WARN.h中定义,在WARN.c中使用怎么会报这个错误呢。(声明一下,结构贴的成员仅在WARN.c文件中调用,其他文件没有)。

然后我又试着,将以下的定义放到:CONFIG.h 总的头文件中去,结果还是出现这个问题。百思不得其解。


然后,把整个结构体定义放到WARN.c文件中,编译通过。我就想是不是struct WARNING ER_WARN;、struct WARNING WARN;这两个语句的问题,然后我单独把这个两个语句放到WARN.c文件中,红色部分依然留在WARN.h 中,编译也通过了……

很是纳闷,这是为什么?



struct WARNING        //报警
{
  unsigned char Weight;//吊重
  unsigned char Moment;//力矩
  unsigned char Span;           //限幅
  unsigned char Lifting;//起升
  unsigned char Rotary;        //回转
  unsigned char Wind;        //风速
  unsigned char DipAngle;//倾角
  unsigned char Hight;//高度
  
};

struct EARLY_WARNING        //预警
{
  unsigned char Weight;//吊重
  unsigned char Moment;//力矩
  unsigned char Span;           //限幅
  unsigned char Lifting;//起升
  unsigned char Rotary;        //回转
  unsigned char Wind;        //风速
  unsigned char DipAngle;//倾角
  unsigned char Hight;//高度
};
struct WARNING ER_WARN;
struct WARNING WARN;


[解决办法]
一般只在头文件中声明变量,在原文件中定义变量,

即使你在头文件中使用了预编译指令 #ifndef.... #define ... #endif,也不能在头文件中定义变量
[解决办法]
你的头文件没有用LS那个所说的条件编译指令

当你在多个地方包含这个头文件的时候,就会在两个地方产生定义

因为,其实包含也是比较单纯的文本复制,相当于一个头文件被分别复制到两个地方,这个编译的时候当然就冲突了
[解决办法]
在WARN.h 文件的最开始两行加上
#ifdef _WARN_H_
#define _WARN_H_


在该文件的最后一行加上

#endif
[解决办法]
上面提到的方法也不通用,比如说有几个.c文件要包含同一个.h文件,而那个.h文件定义了变量或者结构编译还是会通不过,比较通用的方法是:专门用一个.c文件来定义变量或者结构,用对应的.h文件来声明。所有的.c文件都则都可以包含声明变量的.h文件。
[解决办法]
即使可以通过#ifdef的方式解决问题,这也不是好的方法,对于变量的定义,应放在实现文件里面,然后通过extern的方式来引用
[解决办法]
标准的做法还是在.h文件中声明变量,在一个.c文件中定义变量,其它.c文件要用到变量只要包含.h头文件,相当于变量声明,就可以引用其它.c文件中定义的变量了。
[解决办法]
切记切记,定义的变量要放在C文件里,声明才放在H文件,

热点排行