前言

  1. 本博文基于MDK5.26的C环境编写,不过跟芯片没关系,是软件调试出现的问题;
  2. 本博文并一定适合其他原因引起的未定义错误,仅适合“已经定义了xxx,但却报没定义的错”这种情况;
  3. 如有不足之处,还请多多指教;

迷之错误: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 的错误相关推荐

  1. 解决Stm32出现..\HARDWARE\ADC\adc.c(22): error: #20: identifier ADC_InitTypeDef is undefined异常

    笔者本科阶段读的是通信工程,因此各种比赛或者作业免不了要使用stm32.而使用stm32中将几个单独的工程合并起来更是家常便饭,而合并工程中常遇到的一个问题是已经将.c文件添加到工程中,而且路径也配置 ...

  2. STM32单片机报错error: #20: identifier “TIM2_IRQn“ is undefined

    stm32单片机编译报错:error: #20: identifier "TIM2_IRQn" is undefined 出错的原因:选择单片机型号头文件不对 出错例字如下图: 编 ...

  3. stm32编译错误error: #20: identifier “USART_IT_RXNE“ is undefined

    基于stm32搭建好keil工程框架,编译时出现几十个error,然后仔细看了下,都是些未定义错误. 想到可能时头文件问题,然后重新检查了下头文件的包含关系,仍然存在错误: 然后百度了下类似的问题,发 ...

  4. error: #20: identifier “uint16_t“ is undefined

    出现问题的原因是没有添加#include <string.h>,这个CCS自带库里面有,需要在properties里面的include options里面添加"\ccs6.3\c ...

  5. ..\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.职业规划 文章目录 前言 前言 送 ...

  6. error: #20: identifier u16 is undefined

    发现是头文件里#include"system.h" ,放在void TIM4_Init(u16 pre,u16 psc);下面所导致的

  7. 关于error: #20: identifier “XXXX“ is undefined缺失.h文件的问题

    起因是在写stm32串口配置的时候,报了这个错,goto也没用,稍微查了查了也没搜到答案,但大概知道是我缺那stm32f1xx_hal_uart.h那个文件,但又不知道怎么给他添进去,最后是科协学长帮 ...

  8. 明明定义了却报“xxx is undefined”的错误

    明明定义了却报"xxx is undefined"的错误 我遇到这个问题是在使用promise的时候,解决方法其实很简单就是在外面多加一行代码const _this = this; ...

  9. 定义bool型变量出现 ”identifier “bool” is undefined”错误

    bool表示布尔型变量,也就是逻辑型变量. bool类似于其他的基本数据类型,他和char字符型变量一样,有1个字节. 但是bool变量和char变量不一样的地方是,同样是一个字节的变量,bool只有 ...

最新文章

  1. 使用Movie Maker制作视频相册
  2. 自定义eachFile遍历文件夹文件
  3. 【NLP】哈工大|NLP数据增强方法?我有15种
  4. CMake基础 第3节 静态库
  5. React demo:express、react-redux、react-router、react-roter-redux、redux-thunk(一)
  6. python 程序停止打印日志_停止 Spring Boot 服务的几种优雅姿势
  7. STL之ForwordList
  8. 中仪股份管道机器人_中仪股份_X5-HW_管道检测机器人
  9. 详解深度学习中的梯度消失、爆炸原因及其解决方法
  10. 计算机usb接口管理软件,大势至电脑USB端口管理软件
  11. 辰星人才 | 旷视实习生鲁盼:UCLA朱松纯准博士,两年七篇顶会论文
  12. python中的相对导入//__name__和__package__的作用//以及相对导入的两个经典错误
  13. STC8单片机ADC采样注意事项
  14. 完美国际真数苹果_让苹果数据线下岗的两款数据线!剪断了还能用!
  15. qq手机浏览器不支持HTML5,手机QQ浏览器:响应HTML5未来 着眼当下
  16. 资深架构师成长路线 -- 架构师筑基必备技能
  17. oracle的时间各式,Oracle9i日期格式几点说明
  18. 第4章-5 求e的近似值 (15分)python
  19. samba服务器在linux下如何运行共享
  20. PCIe 参考时钟架构 (Refclk Architecture)

热门文章

  1. 焊锡丝内的助焊剂是怎么加进去的。
  2. 如何优化项目人工工时的成本?
  3. 人大金仓常用查询sql
  4. 出口货物退运处理流程
  5. 鸿蒙harmonyOS 使用轻量级数据存储Preferences出现的一个问题
  6. Python VTK Read Write 常用读写以及 渲染 显示
  7. php6.0手册中文版下载,PHP: 下载 PHP中文手册 PHP中国镜像 php 国内镜像
  8. 手机桌面百度搜索框不显示热词_高效搜索神器,你选listary还是火柴?
  9. Shoot Game
  10. vr智慧景区旅游是什么体验?吃喝玩乐“尽在掌握”