搜索
bottom↓
回复: 12

[求助] .h文件中的函数参数使用自定义类型报错:error: #20

[复制链接]

出0入0汤圆

发表于 2017-6-10 18:06:51 | 显示全部楼层 |阅读模式
本帖最后由 Joetu 于 2017-6-11 08:27 编辑

(一) [问题描述]:


(1) 在项目头文件 A.h中声明了一个"enum 类型";  B.h引用了头文件A.h.   在B.h中声明函数,函数使用A.h中声明的类型作为函数参数,

MDK中编译出错,错误提示 : ..\b.h(41): error:  #20: identifier "XXXX" is undefined ;  "XXXX"为A.h中声明的类型.


(2) "自定义类型"不仅限于 enum, 如struct 类型也会出现这样的问题.
(3) B.h肯定包含了A.h, paths中也肯定包含了A B 的路径; 在B.c文件里的函数的内部使用A.h中声明的类型没有问题,如在B.c 函数内部定义一个A.h中声明的结构体类型的局部变量,

(二) A.h


(三) B.h


(四) MDK中错误提示


(五) 环境
编译环境: MDK-ARM 5.22
文件类型: UTF-8

恳请大神指导...

(五) 测试的项目文件
includes.h 文件在ucosii->config


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2017-6-10 19:57:09 | 显示全部楼层
是不是没有把文件所在路径添加到编译选项里?

出0入0汤圆

 楼主| 发表于 2017-6-10 20:12:11 | 显示全部楼层
我已经在c/c++ 的paths 中添加了文件路径,检查了很多遍,而且在MDK中右键该自定义类型,go to definition也是可以找到的

出0入0汤圆

 楼主| 发表于 2017-6-10 20:13:07 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2017-6-11 01:41:46 | 显示全部楼层
方便的话,把3个源码文件传上来。

出0入0汤圆

 楼主| 发表于 2017-6-11 08:17:24 | 显示全部楼层
本帖最后由 Joetu 于 2017-6-11 08:20 编辑

       问题点似乎找到了,我使用的是ucos,由于项目有文件多,所以我把所有对外开放的文件的头文件加入了一个"includes.h" 中,然后这些头文件又都添加了这个头文件"includes.h". 现在我在"includes.h"中注释掉对B.h的引用就不报错了.
      但是我还是不明白问题的原因: ① 我的某个头文件存在错误,所以导致这种情况? ② 头文件语法等上面没有问题, 而是我的项目框架存在问题,导致编译时"顺序不对?"(没有研究过编译问题,)

出0入0汤圆

 楼主| 发表于 2017-6-11 08:31:53 | 显示全部楼层
我在"includes.h" 文件中尝试调整了一下#include "XXXX.h" 的顺序,有时候会出现极其多的的报错,在组织头文件时要注意顺序问题吗

出0入0汤圆

 楼主| 发表于 2017-6-11 08:51:50 | 显示全部楼层
jemmy 发表于 2017-6-11 01:41
方便的话,把3个源码文件传上来。

已上传文件,请大神帮忙参考一下

出0入8汤圆

发表于 2017-6-10 18:06:52 | 显示全部楼层
本帖最后由 security 于 2017-6-12 09:01 编辑

给你说几点吧:
1、首先不建议提供 includes.h 这样全包的头文件,这样的一个副作用,是你对依赖关系不清晰,偷懒,干脆不管三七二十一,不相关的模块,也一并引入进来,导致编译速度的变慢(在工程量小的情况下,看不出什么差异)。
2、你看 includes.h 中引用了 A.h,A.h 中又引用了  includes.h,这样的依赖关系,我已经混乱了,到底是先有鸡,还是先有蛋。

一句话,就是不要用 includes.h 这样全包的头文件,这是偷懒的做法,对此,ucos 要负责,被带坏了。

出0入8汤圆

发表于 2017-6-12 09:07:43 | 显示全部楼层
Joetu 发表于 2017-6-11 08:31
我在"includes.h" 文件中尝试调整了一下#include "XXXX.h" 的顺序,有时候会出现极其多的的报错,在组织头文 ...

头文件引用有先后顺序的,因为头文件体现的是模块间的依赖关系。
而依赖关系是有序的。

当你把依赖关系理清晰后,你自然就明白了。

出0入0汤圆

发表于 2017-6-12 09:21:26 | 显示全部楼层
2、你看 includes.h 中引用了 A.h,A.h 中又引用了  includes.h,这样的依赖关系,我已经混乱了,到底是先有鸡,还是先有蛋。

楼上说的这一条,楼主要理清楚了。。。

出0入0汤圆

 楼主| 发表于 2017-6-12 11:50:35 | 显示全部楼层
感谢各位,头文件体现的是各模块之间的依赖关系,我将代码重新组织一下

出0入0汤圆

 楼主| 发表于 2017-6-12 14:55:54 | 显示全部楼层
问题已解决,感谢各位!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-30 18:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表