变量被重复定义的问题,敬请指教:

[复制链接]
2997|4
 楼主| ahong007 发表于 2009-3-8 14:47 | 显示全部楼层 |阅读模式
变量被重复定义的问题,敬请指教:<br />在Fat32.h中定义:&nbsp;&nbsp;<br />#ifndef&nbsp;_FAT32_H<br />#define&nbsp;_FAT32_H<br />struct&nbsp;FileInfoStruct&nbsp;FileInfo;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//文件信息结构体实体<br />struct&nbsp;FAT32_Init_Arg&nbsp;Init_Arg;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//初始化参数结构体实体<br />#endif<br /><br /><br /><br />在fat32.c中<br />#include&nbsp;&quot;fat32.h&quot;=<br />使用结构体Init_Arg和&nbsp;FileInfo<br /><br /><br /><br /><br />在sdwriteread.c函数中使用&nbsp;<br />#include&nbsp;&quot;fat32.h&quot;<br />extern&nbsp;void&nbsp;FAT32_Init(struct&nbsp;FAT32_Init_Arg&nbsp;*&nbsp;arg&nbsp;);<br />extern&nbsp;struct&nbsp;FileInfoStruct&nbsp;*&nbsp;FAT32_OpenFile(char&nbsp;*filepath);&nbsp;&nbsp;<br /><br />void&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;Uint32&nbsp;i,&nbsp;temp=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;BPB_temp=0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;CSL_init();&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SdRead_Sector(temp,data_buff);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;FAT32_Init(&Init_Arg);<br />&nbsp;&nbsp;&nbsp;&nbsp;FAT32_OpenFile(&quot;ABC.TXT&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;asm(&nbsp;&quot;&nbsp;&nbsp;nop&nbsp;&quot;);<br />}<br />编译后出现错误的结果:<br />&gt&gt&nbsp;&nbsp;&nbsp;error:&nbsp;symbol&nbsp;_Init_Arg&nbsp;is&nbsp;defined&nbsp;multiple&nbsp;times:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E:projects
ead_write_cpl2Debugfat32.obj&nbsp;and<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E:projects
ead_write_cpl2Debugsdwriteread.obj<br />&gt&gt&nbsp;&nbsp;&nbsp;error:&nbsp;symbol&nbsp;_FileInfo&nbsp;is&nbsp;defined&nbsp;multiple&nbsp;times:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E:projects
ead_write_cpl2Debugfat32.obj&nbsp;and<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E:projects
ead_write_cpl2Debugsdwriteread.obj<br />头文件已经进行条件编译,还是出现重复定义的问题,不解,请给指点一下,谢谢
lvkush0903 发表于 2009-3-8 19:39 | 显示全部楼层

编译器的问题

由于工程中的每个.c文件都是独立编译的,即使头文件有<br />#ifndef&nbsp;_FAT32_H<br />#define&nbsp;_FAT32_H<br />....<br />#enfif<br />在其他C文件中只要包含了Fat32.h就会独立的解释,然后每个.c文件生成独立的相同名字的定义。在编译器链接(生成-o)时,就会将工程中所有的符号整合在一起,由于文件中有重名变量,于是就出现了重复定义的错误。<br /><br />解决方法<br />在.c文件中声明变量,然后建一个头文件(.h文件)在所有的变量声明前加上extern,注意这里不要对变量进行的初始化。然后在其他需要使用全局变量的.c文件中包含.h文件。编译器会为.c生成目标文件,然后链接时,如果该.c文件使用了全局变量,链接器就会链接到此.c文件&nbsp;。<br /><br /><br /><br />在Fat32.h中定义变量但不初始化:&nbsp;&nbsp;<br />#ifndef&nbsp;_FAT32_H<br />#define&nbsp;_FAT32_H<br />extern&nbsp;struct&nbsp;FileInfoStruct&nbsp;FileInfo;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//文件信息结构体实体<br />extern&nbsp;struct&nbsp;FAT32_Init_Arg&nbsp;Init_Arg;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//初始化参数结构体实体<br />#endif<br /><br />然后在main和fat32.c中&nbsp;#include&nbsp;&quot;fat32.h&quot;,并初始化即可。<br />
李冬发 发表于 2009-3-8 23:52 | 显示全部楼层

头文件里不能有结构实体的。

  
 楼主| ahong007 发表于 2009-3-9 15:56 | 显示全部楼层

谢谢lvkush0903指点

  
 楼主| ahong007 发表于 2009-3-10 11:40 | 显示全部楼层

李冬发说的对,数据分配空间的不能在头文件中定义,谢谢

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

120

主题

337

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部