在头文件中使用变量,重复定义错误
Use of variable in header files, duplicate definition error
我遇到了重复定义错误的问题。
我必须在其他文件调用的头文件中写一个常量,但发生了这个错误,我不知道如何解决它。
我尝试使用包含防护,但它不起作用。
#ifndef _DEFINE_PORTS__H___INCLUDED
#define _DEFINE_PORTS__H___INCLUDED
#define GPIO_SWPWM_PORT GPIOB
const uint16_t GPIO_SWPVM_LEDS[12] = {GPIO_Pin_0 , GPIO_Pin_1 , GPIO_Pin_2 ,
GPIO_Pin_3 , GPIO_Pin_4 , GPIO_Pin_5 ,
GPIO_Pin_6 , GPIO_Pin_7 , GPIO_Pin_8 ,
GPIO_Pin_10 , GPIO_Pin_12 , GPIO_Pin_14};
#endif // _DEFINE_PORTS__H___INCLUDED
下面报错(这样的比较多);
Error[Li006]: duplicate definitions for "GPIO_SWPVM_LEDS"; in "C:\Andrea\Dev\stm32\ew\Debug\Obj\App.o", and "C:\Andrea\Dev\stm32\ew\Debug\Obj\AppEeprom.o"
头文件守卫在这里无济于事,它们仅解决在同一编译单元(即 .c 文件)中多次包含头文件的问题。
这里你在头文件中定义了一个非静态变量。如果这样做,所有包含此头文件的 .c 文件都将干净地编译,但在链接过程中,所有这些变量都将被多重定义。这就像将函数定义放入头文件中一样。
你应该在你的头文件中包含这个:
static const uint16_t GPIO_SWPVM_LEDS[12] = {......};
...或者在头文件中包含这个(这样更干净,因为 const 变量只存在 一次):
extern const int GPIO_SWPVM_LEDS[12];
并将变量定义放入 一个 .c 文件中:
const uint16_t GPIO_SWPVM_LEDS[12] = {......};
阅读这篇 SO 文章了解更多信息:
- How do I use extern to share variables between source files?
我遇到了重复定义错误的问题。 我必须在其他文件调用的头文件中写一个常量,但发生了这个错误,我不知道如何解决它。 我尝试使用包含防护,但它不起作用。
#ifndef _DEFINE_PORTS__H___INCLUDED
#define _DEFINE_PORTS__H___INCLUDED
#define GPIO_SWPWM_PORT GPIOB
const uint16_t GPIO_SWPVM_LEDS[12] = {GPIO_Pin_0 , GPIO_Pin_1 , GPIO_Pin_2 ,
GPIO_Pin_3 , GPIO_Pin_4 , GPIO_Pin_5 ,
GPIO_Pin_6 , GPIO_Pin_7 , GPIO_Pin_8 ,
GPIO_Pin_10 , GPIO_Pin_12 , GPIO_Pin_14};
#endif // _DEFINE_PORTS__H___INCLUDED
下面报错(这样的比较多);
Error[Li006]: duplicate definitions for "GPIO_SWPVM_LEDS"; in "C:\Andrea\Dev\stm32\ew\Debug\Obj\App.o", and "C:\Andrea\Dev\stm32\ew\Debug\Obj\AppEeprom.o"
头文件守卫在这里无济于事,它们仅解决在同一编译单元(即 .c 文件)中多次包含头文件的问题。
这里你在头文件中定义了一个非静态变量。如果这样做,所有包含此头文件的 .c 文件都将干净地编译,但在链接过程中,所有这些变量都将被多重定义。这就像将函数定义放入头文件中一样。
你应该在你的头文件中包含这个:
static const uint16_t GPIO_SWPVM_LEDS[12] = {......};
...或者在头文件中包含这个(这样更干净,因为 const 变量只存在 一次):
extern const int GPIO_SWPVM_LEDS[12];
并将变量定义放入 一个 .c 文件中:
const uint16_t GPIO_SWPVM_LEDS[12] = {......};
阅读这篇 SO 文章了解更多信息:
- How do I use extern to share variables between source files?