4356|3

6

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

使用KEIL的问题,应该是关于编译器的 [复制链接]

基本问题描述:使用uC/OS-II+uC/GUI在STM32(奋斗mini板)上做界面,编译器始终提示uC/GUI(V3.90版)中的HEADER.h文件中的GUI_CURSOR,未定义:

..\GUIinc\HEADER.h(78): error:  #20: identifier "GUI_CURSOR" is undefined

说明:

1.这是已经移植好的工程上出现的问题,之前一直没有,直到前几天要用LISTVIEW控件时,把LISTVIEW.h和LISTVIEW_private.h加入后,出现该问题;

2.关于定义:GUI_CURSOR在GUI.h中定义,而HEADER.h文件已经包含了 GUI.h;

3.头文件包含关系:GUI.h和HEADER.h都包含在include.h中,其中,GUI.h中也包含了include.h,最后HEADER.h也包含了GUI.h;

4.最后,在所有只包含了GUI.h的.c文件中会提示上面出现的“HEADER.h文件中的GUI_CURSOR未定义”问题;

5.工程里的“头文件路径”我设置的没错;

疑问:

1.其实,我定位在报错的地方,右键GUI_CURSOR,是可以定位到GUI.h中相应位置的,但是编译器就是说没定义。。。

2.大家的头文件里的包含关系是怎样的?-除非用到某些公用的数据结构时才加入相应的“底层头文件”;

3.后来我对包含关系做了以下修改:

a.include.h包含了所有ST固件库,uC/OS,用到的uC/GUI控件,仅包含在用户的应用程序中;

b.在GUI.h中,不包含include.h,而是用到谁再包含谁。在原来仅包含GUI.h的C文件中,包含进include.h;

4.这样一来,编译器不再提示错误。问题也解决了,但是奇怪的事情又发生了——当我把3.中的修改再改回去之后,这次编译器不报错了!!!

  看到最后的大侠,才是真的大侠。。。谁能帮我解释以下4.的问题!!

最新回复

有时候编译器在编译时如果以前编译过(也就是说有各个文件的.o文件存在),编译器会偷懒不再进行编译。所以会出现你上面的说的问题。建议你更改头文件后进行全编译。问题就不会发生了。祝你成功!  详情 回复 发表于 2012-4-11 09:30
点赞 关注

回复
举报

6

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

不好意思,最后我粗心了

更正一下,由于最后修改时不细心,最终改回去之后——即在GUI.h中包含include.h,在其他C文件中仅包含GUI.h时,编译器还是会提示这些C文件中的HEADER.h里GUI_CURSER未定义错误。
但是还是需要有人解释一下吧。。。
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

只能“无耻的”自己顶了。。

如题
 
 
 

回复

463

帖子

0

TA的资源

纯净的硅(中级)

4
 

回复 楼主 kouyaofei 的帖子

有时候编译器在编译时如果以前编译过(也就是说有各个文件的.o文件存在),编译器会偷懒不再进行编译。所以会出现你上面的说的问题。建议你更改头文件后进行全编译。问题就不会发生了。祝你成功!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 8

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表