> 描述

  <+> 环境为 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. 20155227《网络对抗》Exp6 信息收集与漏洞扫描

    20155227<网络对抗>Exp6 信息收集与漏洞扫描 实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 基础问题回答 哪些组织负责DNS,IP的管理. 全球根服务器均由美国政府 ...

  2. EZ 2017 01 07 t

    这名字诡异(然而就是这样) 这次主要是yekehe和yu‘ao都来了,所以很开心的讨论(上了200). 但是,yu’ao dalao又AK了!(666666) 不过总体难度也不高,主要是T3没思路. ...

  3. Ubuntu16.04LTS +Qt+boost1.66编译错误:consuming_buffers.hpp: parse error in template argument list

    升级gcc版本至 6 以上.. 安装gcc-6系列与安装boost (Ubuntu16.04LTS)

  4. python 网络爬虫介绍

    一.网络爬虫相关概念 网络爬虫介绍 我们都知道,当前我们所处的时代是大数据的时代,在大数据时代,要进行数据分析,首先要有数据源,而学习爬虫,可以让我们获取更多的数据源,并且这些数据源可以按我们的目的进 ...

  5. Security7:管理SQL Server Agent的权限

    SQL Server Agent对象包括警报(Alert),操作员(Operator),Job,调度(Schedule)和代理(Proxy),SQL Server使用msdb系统数据库管理Agent ...

  6. R语言学习 第三篇:数据框

    数据框(data.frame)是最常用的数据结构,用于存储二维表(即关系表)的数据,每一列存储的数据类型必须相同,不同数据列的数据类型可以相同,也可以不同,但是每列的行数(长度)必须相同.数据框的每列 ...

  7. jQuery .attr() vs. .prop()

    Property vs. Attribute 在开始正式比较prop()和attr()两个jQuery方法之前,我们有必要先弄清一下Property和Attribute两个单词的意思.在中文里面,它们 ...

  8. Monkey稳定性测试

    1.环境准备:Android SDK环境配置 2.手机连接/模拟器连接 : 1)手机打开开发者模式并允许USB连接 2)校验手机是否连接:打开cmd 输入 adb devices 3.查找apk包名及 ...

  9. B1030 完美数列 (25 分)

    这是一道二分法的题目,许久不使用二分法,感觉有点生疏. #include<bits/stdc++.h> using namespace std; const int MAXN=100000 ...

  10. 基于tensorflow 1.x 的检索机器人chatbot-retrieval

    Chatbot-retrieval说基于tensorflow的检索机器人,原版的代码路径是 https://github.com/dennybritz/chatbot-retrieval, 但是在te ...