实际已经定义却出现 error: #20: identifier xxx is undefined 的错误
前言
- 本博文基于MDK5.26的C环境编写,不过跟芯片没关系,是软件调试出现的问题;
- 本博文并一定适合其他原因引起的未定义错误,仅适合“已经定义了xxx,但却报没定义的错”这种情况;
- 如有不足之处,还请多多指教;
迷之错误:error: #20: identifier “xxx” is undefined
实际上我是定义了xxx的;但是编译器却一直报错;
故事是这样的:
我定义了a.h,b.h,c.h。其中a.h和b.h都是子功能头文件,而c.h是包含所有项目头文件的集合体,比如数据类型,当然也包含a.h和b.h;关系看下面代码;
/* c.h */
#ifndef C_H
#define C_H#include "Type.h"
#include "a.h"
#include "b.h"
#include "x.h"
#include "xx.h"
#include "xxx.h"#endif /* C_H */
/* a.h */
#include "c.h" //为了让头文件看起来更简单,我为每一个子功能头文件都包含了c.h,这将是后来引起错误的地方;typedef struct ITEM
{//各成员
}Item_t;
/* b.h */
#include "c.h" struct BLOCK
{Item_t Item1; // 这里我引用了a.h中的Item_t类型,并定义了变量;这里就是报错的地方;//其他成员; }Block;
这种情况下就出了问题,那么问题在哪儿哪?
在b.h中的Item_t Item1; ** ,这个地方就是报错的地方;显示error: #20: identifier “Item_t” is undefined,顺着这儿往上看的,这个问题就出在了a.h里的这个#include “c.h” **;对于a.h来说,调用的 **#include “c.h”**可以展开为:
/* a.h */#include "Type.h"
#include "a.h"
#include "b.h"
#include "x.h"
#include "xx.h"
#include "xxx.h"typedef struct ITEM
{//各成员
}Item_t;
所以错误的地方是:相对于a.h文件来说,在定义ITEM结构体之前就已经调用了b.h,而b.h里又有对Item_t类型变量的定义,所以就出顺序逻辑错误;
解决办法
在大工程中尽量避免在头文件中使用总头文件;所以这里就在a.h和b.h中去掉包含的c.h文件,需要什么头文件就用什么头文件;所以修改完之后是:
/* a.h */
#include "Type.h"
#include "x.h"
#include "xx.h"
#include "xxx.h"typedef struct ITEM
{//各成员
}Item_t;
/* b.h */
#include "a.h"
#include "x.h"
#include "xx.h"
#include "xxx.h"struct BLOCK
{Item_t Item1; //其他成员; }Block;
实际已经定义却出现 error: #20: identifier xxx is undefined 的错误相关推荐
- 解决Stm32出现..\HARDWARE\ADC\adc.c(22): error: #20: identifier ADC_InitTypeDef is undefined异常
笔者本科阶段读的是通信工程,因此各种比赛或者作业免不了要使用stm32.而使用stm32中将几个单独的工程合并起来更是家常便饭,而合并工程中常遇到的一个问题是已经将.c文件添加到工程中,而且路径也配置 ...
- STM32单片机报错error: #20: identifier “TIM2_IRQn“ is undefined
stm32单片机编译报错:error: #20: identifier "TIM2_IRQn" is undefined 出错的原因:选择单片机型号头文件不对 出错例字如下图: 编 ...
- stm32编译错误error: #20: identifier “USART_IT_RXNE“ is undefined
基于stm32搭建好keil工程框架,编译时出现几十个error,然后仔细看了下,都是些未定义错误. 想到可能时头文件问题,然后重新检查了下头文件的包含关系,仍然存在错误: 然后百度了下类似的问题,发 ...
- error: #20: identifier “uint16_t“ is undefined
出现问题的原因是没有添加#include <string.h>,这个CCS自带库里面有,需要在properties里面的include options里面添加"\ccs6.3\c ...
- ..\Src\INA226.c(142): error: #20: identifier “GPIO_IDR_IDR9“ is undefined
系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言 前言 送 ...
- error: #20: identifier u16 is undefined
发现是头文件里#include"system.h" ,放在void TIM4_Init(u16 pre,u16 psc);下面所导致的
- 关于error: #20: identifier “XXXX“ is undefined缺失.h文件的问题
起因是在写stm32串口配置的时候,报了这个错,goto也没用,稍微查了查了也没搜到答案,但大概知道是我缺那stm32f1xx_hal_uart.h那个文件,但又不知道怎么给他添进去,最后是科协学长帮 ...
- 明明定义了却报“xxx is undefined”的错误
明明定义了却报"xxx is undefined"的错误 我遇到这个问题是在使用promise的时候,解决方法其实很简单就是在外面多加一行代码const _this = this; ...
- 定义bool型变量出现 ”identifier “bool” is undefined”错误
bool表示布尔型变量,也就是逻辑型变量. bool类似于其他的基本数据类型,他和char字符型变量一样,有1个字节. 但是bool变量和char变量不一样的地方是,同样是一个字节的变量,bool只有 ...
最新文章
- 使用Movie Maker制作视频相册
- 自定义eachFile遍历文件夹文件
- 【NLP】哈工大|NLP数据增强方法?我有15种
- CMake基础 第3节 静态库
- React demo:express、react-redux、react-router、react-roter-redux、redux-thunk(一)
- python 程序停止打印日志_停止 Spring Boot 服务的几种优雅姿势
- STL之ForwordList
- 中仪股份管道机器人_中仪股份_X5-HW_管道检测机器人
- 详解深度学习中的梯度消失、爆炸原因及其解决方法
- 计算机usb接口管理软件,大势至电脑USB端口管理软件
- 辰星人才 | 旷视实习生鲁盼:UCLA朱松纯准博士,两年七篇顶会论文
- python中的相对导入//__name__和__package__的作用//以及相对导入的两个经典错误
- STC8单片机ADC采样注意事项
- 完美国际真数苹果_让苹果数据线下岗的两款数据线!剪断了还能用!
- qq手机浏览器不支持HTML5,手机QQ浏览器:响应HTML5未来 着眼当下
- 资深架构师成长路线 -- 架构师筑基必备技能
- oracle的时间各式,Oracle9i日期格式几点说明
- 第4章-5 求e的近似值 (15分)python
- samba服务器在linux下如何运行共享
- PCIe 参考时钟架构 (Refclk Architecture)