#86_【无标题】每次 .h 被 #include,就等于在所有包含它的 .c 文件中都复制了一份定义。
我在.h中定义了/CN:数码管段码表 (扫描引脚复用型)-- EN:Digital Tube Segment Code Table (Scan Pin Multiplexing Type)/const uint8_t NUM_TAB[10] {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};但是这个时候突然间报错了所以感觉有意思错误原因Error LNK:(1044) Symbol _NUM_TAB redefined.你的NUM_TAB被两个地方定义T188.h第 37 行constuint8_tNUM_TAB[10]{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};很可能在之前某个版本的Charge.c或其他文件中也有NUM_TAB的定义。虽然你当前提供的Charge.c我没看到但根据对话历史早期版本Charge.c中有constuint8_tNUM_TAB[10]{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};链接器看到两个.o文件里都有NUM_TAB就报重复定义了。修复方法在T188.h中把constuint8_tNUM_TAB[10]{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};改为声明加extern去掉初始化和长度externconstuint8_tNUM_TAB[10];然后在T188.c全局变量区加上定义constuint8_tNUM_TAB[10]{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};为什么.h中定义不行每次.h被#include就等于在所有包含它的.c文件中都复制了一份定义。链接时多个.o都有同一个变量/常量就冲突了。规则.h中只能放声明extern.c中放定义带初始化另外g_Time_Tick还有问题你现在的T188.h第 31 行bit g_Time_Tick;没有extern这样还是定义不是声明。仍然会导致被多个.c包含时重复定义。必须改成externbit g_Time_Tick;然后在T188.c全局变量区加上bit g_Time_Tick0;汇总修改文件行修改前修改后T188.h31bit g_Time_Tick;extern bit g_Time_Tick;T188.h37const uint8_t NUM_TAB[10] {...};extern const uint8_t NUM_TAB[10];T188.c全局变量区无加上bit g_Time_Tick 0;和const uint8_t NUM_TAB[10] {...};这样就能彻底解决重复定义的问题了。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2598617.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!