> 描述

  <+> 环境为 KEIL5.20 & STM32F429工程,平台为 win10

  <+> 结构体原形如下

@File <A.h>
#include "all.h" 1 /* Define the GPS structure ---------------------------------------------------------------------*/
typedef struct
{
uint32_t alarm_flag; /* ±¨¾¯±êÖ¾ */
uint32_t status; /* ״̬ */
uint32_t latitude; /* ά¶È */
uint32_t longitude; /* ¾­¶È */
uint16_t elevation; /* º£°Î */
uint16_t speed; /* ËÙ¶È */
uint16_t direction; /* ·½Ïò */
uint8_t GMT8[]; /* GMT+8 YY-MM-DD-hh-mm-ss */
}GPS_data_s; typedef struct GPS_tpye
{
uint8_t msg_head; /* ÏûÏ¢±êʶͷ */
uint16_t msg_ID; /* ÏûÏ¢ ID */
uint16_t msg_prop; /* ÏûÏ¢ÌåÊôÐÔ */
uint8_t term_phone[]; /* ÖÕ¶ËÊÖ»úºÅ */
uint16_t msg_SwiftNum; /* ÏûÏ¢Á÷Ë®ºÅ */
GPS_data_s sMessage; /* ÏûÏ¢Ìå */
uint8_t msg_CRC; /* УÑéÂë */
uint8_t msg_tail; /* ÏûÏ¢±êʶβ */
}GPS_package_s; /* Define single union control bytes output */
typedef union
{
GPS_package_s sGPS_obj;
uint8_t GPS_byte[sizeof(GPS_package_s)];
}GPS_package_u;

  <+> 引用类型源文件如下

@File <B.c> 
#include "B.h" 1 void GMT8_to_BCD(GPS_RESULT_s *SrcObj, GPS_package_s *DesObj)
{
uint8_t i; for(i = ; i < ; i++)
{
dec_to_BCD(*(&SrcObj->GMT8.year + i), &DesObj->sMessage.GMT8[-i], );
} }
@File <B.h>
#include "all.h" 1 void GMT8_to_BCD(GPS_RESULT_s *SrcObj, GPS_package_s *DesObj);

  <+> 集合头文件 (为方便引用,all.h文件中包含了所有其他文件的头文件)

 #include "A.h"
#include "B.h"

> 问题

  <+> B.c文件中使用A.h文件中定义的结构体类无问题

  <+> 在B.h文件中引用A.h文件中定义的结构体就会报错 error: #20: identifier "GPS_package_s" is undefined

> 分析

  <+> 查看了提示未定义的那个标识符,确实是在A.h文件中定义了的,但这就很奇怪了

  <+> 是不是由于头文件 include "all.h",导致头文件包含了自身而出现了错误

  <+> 是否为不支持别名类(即typedef定义的)

  <+> ...

> 解决

  <+> 将头文件 "all.h" 中的 include "B.h" 去掉,可编译无错

  <+> 将类别名 GPS_package_s 替换为原类 struct GPS_type,可编译无错

> 总结

  <+> 以上两种解决方法只是治标不治本,本质原因未解决

  <+> 猜测导致这个错误的原因:

    <++> 编译器编译有先后之分

    <++> ...

导致 KEIL error #20 的一种情况的更多相关文章

  1. LoadRunner 场景运行error的几种情况

    一. Error -27727: Step download timeout (120 seconds)has expired when downloading resource(s). Set th ...

  2. php出现“syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM”错误的一种情况,及解决方法

    PHP中的“syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM”错误,可能是因为美元符号$的误用,看下面一种情况 class Test{         s ...

  3. error: /usr/include/stdio.h: Permission denied 的一种情况分析

    error: /usr/include/stdio.h: Permission denied 的一种情况分析 代码: #include <stdio.h> int main(){ prin ...

  4. 导致“mysql has gone away”的两种情况

    导致“mysql has gone away”的两种情况 By Cruise 1.  wait_timeout参数 在开发代理server时, 我使用了jdbc连接数据库,并采用长连接的方式连接数据库 ...

  5. [小问题笔记(二)] 可能导致DropDownList的SelectedIndexChanged事件不触发的几种情况

    遇到SelectedIndexChanged事件没有触发,可以依次检查以下几种情况是否在程序中出现. 一.DropDownList的不同option设置了相同的value . 二.没有写 AutoPo ...

  6. Redo丢失的4种情况及处理方法

    这篇文章重点讨论Redo丢失的几种情况,及每种情况的处理方法. 一.说明:1.以下所说的当前日志指日志状态为CURRENT,ACTIVE,非当前日志指日志状态为INACTIVE2.不用考虑归档和非归档 ...

  7. 探讨read的返回值的三种情况

    http://blog.chinaunix.net/uid-23629988-id-3035613.html 今天探讨一个很看似简单的API “read”的返回值问题.read的返回值有哪几个值?每个 ...

  8. Git应用—05Git文件冲突合并的几种情况(转载)

    git文件冲突合并的几种情况 https://xieye.iteye.com/blog/2433229 本文描述了git冲突的几种常见情况和解决方案,老鸟请直接忽略本文.假设冲突文件是 test/Te ...

  9. hive使用spark引擎的几种情况

    使用spark引擎查询hive有以下几种方式:1>使用spark-sql(spark sql cli)2>使用spark-thrift提交查询sql3>使用hive on spark ...

随机推荐

  1. intellij idea新建maven项目,一直loading archetype list.....

    不知道什么时候开始,在idea里新建maven项目时,在new module页面,一直显示loading archetype list....,导致一直没办法新建.后来我以为是防火墙问题,各种设置还是 ...

  2. OO——电梯作业总结

    目录 电梯作业总结 程序结构与复杂度的分析 第一次作业 第二次作业 第三次作业 程序BUG的分析 互测 自动评测 有效性 总结 电梯作业总结 程序结构与复杂度的分析 第一次作业 1.设计思路 第一次作 ...

  3. ME_PROCESS_PO_CUST 实现采购订单行项目增强

    用户希望创建采购订单时,输入行项目时,能根据采购订单类型,自动带出科目分类类别. 业务顾问看了一下配置,不能实现这个功能,所以用增强实现. 采购订单BADI增强:ME_PROCESS_PO_CUST. ...

  4. WFP page navigator control

    WPF navigator UI: <Grid x:Class="WpfApplication2.PagerNav" xmlns="http://schemas.m ...

  5. Python+Matplotlib制作动画

    注: 在"实验设计与数据处理"的课后作业中,有一个数据可视化的作业,利用课程上学习的某种方法找一个二维函数的最大值,并将这个寻找的过程可视化.在作业里面利用了Matplotlib的 ...

  6. Java设计模式之适配器设计模式(项目升级案例)

    今天是我学习到Java设计模式中的第三个设计模式了,但是天气又开始变得狂热起来,对于我这个凉爽惯了的青藏人来说,又是非常闹心的一件事儿,好了不管怎么样,目标还是目标(争取把23种Java设计模式接触一 ...

  7. docker 学习笔记(2)--doucker file命令

    FROM base       ---- imageRUN                  ---- 执行命令ADD   ---- 添加文件COPY         ---- 拷贝文件CMD    ...

  8. 【Alpha】功能规格说明书

    更新说明:从用户需求分析中剥离有关用户场景分析部分,加入功能规格说明书. Github地址:https://github.com/buaase/Phylab-Web/blob/master/docs/ ...

  9. Python爬虫实战:2017中国最好大学排名

    抓取内容: 从最好大学网上抓取中国前10的大学排名.大学名称.总分,并数据格式左对齐. http://www.zuihaodaxue.cn/zuihaodaxuepaiming2017.html 首先 ...

  10. node之post提交上传

    post文件上传 multer 中间件 在node中 express为了性能考虑采用按需加载的方式,引入各种中间件来完成需求, 平时解析post上传数据时候,是用body-parse.但这个中间件有缺 ...