【【IAR】定义结构体出现的错误】定义结构体出现的错误Error[e27]:
想定义两个结构体,在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 (…… )
文件.c是从来都是不要包含.c文件的,否则很容易出现重复定义的错误。类型的定义和类型变量的定义不同,类型定义只是描
述一个类型,是给编译器看的,不会产生可执行代码。类型变量定义是指在执行文件中真实得存在这么一块内容。因此,类型
定义可以重复出现也没关系,类型变量是不能在多个.c中出现,否则就是重复定义。因为每个.c里都要写清楚类型定义很麻
烦,所以一般都把类型定义写在.h里,而在.c里采用简单的写法,如struct A a;这样定义变量,不需把整个类型的描述再写一
遍。
出现上述错误的原因是:我们在.h中 既定义了类型:
struct WARNING //报警
{
……
};
又定义了类型变量
struct WARNING WARN;
然后因为所有的.C文件都#include了.c文件,#include相当于简单的拷贝,因而在多个.c文件中出现了:struct WARNING
WARN; C不允许.c中有多个变量,因而出错。
***************************************************************************
我就纳闷了,在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; //力矩
评论0