C Programming Error: undefined symbol to a struct (Keil error L6218E)
C Programming Error: undefined symbol to a struct (Keil error L6218E)
我正在使用Keil MDK ARM开发一个项目。然而,当我尝试构建我的代码时,软件工具抛出错误:L6218E:未定义的符号位(引用自 main.o)。
其中 Bit 是我用来存储布尔值的结构。例如:
在variable.h文件中
struct
{
unsigned bPowerONStatus : 1;
unsigned bTimerONStatus : 1;
} extern Bit;
在 main.c 文件中:
#include variable.h
int main()
{
while(1)
{
ReadTimerStatus();
if(Bit.bPowerONStatus)
{
// System is ON
}
else
{
// System if OFF
}
}
}
在PowerChecker.c文件中
#include variable.h
void ReadTimerStatus(void)
{
if(Bit.bTimerONStatus)
{
Bit.bPowerONStatus = 1;
}
else
{
Bit.bPowerONStatus = 0;
}
}
我在这里做错了什么?定义将在多个源文件中使用的结构的正确方法是什么?
使用关键字 extern
在文件范围内声明一个变量,但没有初始化器声明变量具有外部链接,但不会 定义 变量。需要在程序的其他地方定义变量。
对于您的 Bit
变量,它已使用没有类型别名的匿名 struct
类型声明,因此在定义变量时无法使用相同的类型.为了解决这个问题,您需要使用 标签 定义 struct
类型,或者在 typedef
声明中定义 struct
类型,或者你可以两者都做。
将存储class说明符如extern
放在声明的前面是比较常规的。
在variable.h中:
struct StatusBits
{
unsigned bPowerONStatus : 1;
unsigned bTimerONStatus : 1;
};
extern struct StatusBits Bits;
仅在一个 C 文件中,例如main.c 或 variable.c:
#include "variable.h"
struct StatusBits Bits;
注意上面的struct StatusBits Bits;
有外部链接,没有初始化器,但还没有声明extern
,所以是暂定的定义Bits
变量。除非被具有初始值设定项的同一变量的定义覆盖,否则它将表现得好像已使用 {0}
.
初始化一样
我正在使用Keil MDK ARM开发一个项目。然而,当我尝试构建我的代码时,软件工具抛出错误:L6218E:未定义的符号位(引用自 main.o)。 其中 Bit 是我用来存储布尔值的结构。例如:
在variable.h文件中
struct
{
unsigned bPowerONStatus : 1;
unsigned bTimerONStatus : 1;
} extern Bit;
在 main.c 文件中:
#include variable.h
int main()
{
while(1)
{
ReadTimerStatus();
if(Bit.bPowerONStatus)
{
// System is ON
}
else
{
// System if OFF
}
}
}
在PowerChecker.c文件中
#include variable.h
void ReadTimerStatus(void)
{
if(Bit.bTimerONStatus)
{
Bit.bPowerONStatus = 1;
}
else
{
Bit.bPowerONStatus = 0;
}
}
我在这里做错了什么?定义将在多个源文件中使用的结构的正确方法是什么?
使用关键字 extern
在文件范围内声明一个变量,但没有初始化器声明变量具有外部链接,但不会 定义 变量。需要在程序的其他地方定义变量。
对于您的 Bit
变量,它已使用没有类型别名的匿名 struct
类型声明,因此在定义变量时无法使用相同的类型.为了解决这个问题,您需要使用 标签 定义 struct
类型,或者在 typedef
声明中定义 struct
类型,或者你可以两者都做。
将存储class说明符如extern
放在声明的前面是比较常规的。
在variable.h中:
struct StatusBits
{
unsigned bPowerONStatus : 1;
unsigned bTimerONStatus : 1;
};
extern struct StatusBits Bits;
仅在一个 C 文件中,例如main.c 或 variable.c:
#include "variable.h"
struct StatusBits Bits;
注意上面的struct StatusBits Bits;
有外部链接,没有初始化器,但还没有声明extern
,所以是暂定的定义Bits
变量。除非被具有初始值设定项的同一变量的定义覆盖,否则它将表现得好像已使用 {0}
.