基本问题描述:使用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.的问题!! |