Keil中MULTIPLE PUBLIC DEFINITIONS错误的处理
第一次用Markdown写点东西,所以在内容结构和节奏上不如以往简洁,为了节约大家获取信息的效率,可以通过目录直接跳转去对应的部分看相应的内容。
错误解释
报错含义
多个文件中变量的重复定义
纠错思路
在正确且合理的地方源文件中进行正确合理且不重复的定义或声明。
举例解释
比如说,用LED的颜色和闪烁频率来表示电池电量的不同状态以及电机的运转状态。
涉及到的文件起码包括LED.c、MotorControl.c及其对应的 .h 文件和main.c文件。
我用白色LED的点亮来表示电机运转中,需要将MotorWorkOnFlag这一变量当做点亮LED的判断条件。那么变量的定义和声明将如何在相关源文件中合理且正确的体现,请参照下面的代码段。
代码实现
MotorControl.c
// MotorControl.c
#include "MotorControl.h"
unsigned char MotorWorkOnFlag = 0;
MotorControl.h
// MotorControl.h
#ifndef _MOTORCONTROL_H
#define _MOTORCONTROL_H
extern unsigned char MotorWorkOnFlag ;
#endif
LED.c
// LED.c
#include "LED.h"
void WhiteLEDWorkOn()
{
if(MotorWorkOnFlag == 1)
{
P10 = 0;
}
}
LED.h
//LED.h
#ifndef _LED_H
#define _LED_H
extern unsigned char MotorWorkOnFlag;
void WhiteLEDWorkOn();
#endif
总结
用 文字 人话解释
1 在产生定义的.c文件中定义,在其对应的.h文件中进行声明。
2 在使用的.c文件对应的.h文件中进行声明。
警告
1 在声明的时候不要进行赋值,否则会有另一个报错:multiple initialization即重复初始化。
2 这几个代码片段只是为了解释MotorWorkOnFlag这个变量在别的源文件中调用赋值时产生的定义声明问题,并不能单独运行。
本文详细介绍了Keil编译器出现'MULTIPLE PUBLIC DEFINITIONS'错误的原因和处理方法。错误源于多个文件中对同一变量的重复定义。解决思路是在正确的位置进行定义和声明,例如在.c文件中定义,在对应的.h文件中声明。通过示例代码展示了如何在MotorControl.c、MotorControl.h、LED.c和LED.h文件中正确处理MotorWorkOnFlag变量,避免重复定义。同时,提醒在声明时不应赋值,防止其他报错。
1万+

被折叠的 条评论
为什么被折叠?



