首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

#ifndef防止重复引用出错,请求援助或者帮忙解释原委解决办法

2012-02-28 
#ifndef防止重复引用出错,请求援助或者帮忙解释原委使用#ifndef_INCLUDE_TYPE_H_#define_INCLUDE_TYPE_H_.

#ifndef防止重复引用出错,请求援助或者帮忙解释原委
使用
#ifndef   _INCLUDE_TYPE_H_
#define   _INCLUDE_TYPE_H_
.
.
.
#endif
定义头文件,原本意思是为了防止重复引用。现出现问题如下:
1.有a文件定义字符名称,b引用a,c引用b.这样,在c的程序里除了#include   "b.h "
还要不要#include "a.h "?
2.碰到连续多个引用时,是不是每个涉及到的type.h都要加上ifndef?
现实情况是这样:
type.h:
#ifndef   _INLUTDE_TYPES_H_
#define   _INCLUDE_TYPES_H_
typedef   unsigned   char                     uchar     ;
typedef   unsigned   short                   ushort   ;
#endif

rgstruct.h:
#ifndef   _INLUTDE_TYPES_H_
#include   "types.h "
#endif
#include   "rgdef.h "
#include   "eqstruct.h "

rmRgread.c:
#include   <string.h>
#include   "trsocket.h "
#include   "rmDefine.h "
#include   "rmStruct.h "
#include   "rgstruct.h "
这样写对不对?老是如下出错。
/proj/asrc/r23/drs/UP/include/types.h:16:   error:   redefinition   of   typedef   ‘uchar’
/proj/asrc/r23/drs/UP/include/types.h:16:   error:   previous   declaration   of   ‘uchar’   was   here
/proj/asrc/r23/drs/UP/include/types.h:17:   error:   redefinition   of   typedef   ‘ushort’
/proj/asrc/r23/drs/UP/include/types.h:17:   error:   previous   declaration   of   ‘ushort’   was   here
我也知道大家很忙很辛苦,看这么大段代码眼睛也不舒服。但是在是搞不定,弄了一下午了,只好分数上给各位好看了。谢谢。。。



[解决办法]
/proj/asrc/r23/drs/UP/include/types.h:16: error: redefinition of typedef ‘uchar’
说明了types.h中的uchar已在别的地方被定义过了!~~~
还有
rgstruct.h:
#ifndef _INLUTDE_TYPES_H_
#include "types.h "
#endif
#include "rgdef.h "
#include "eqstruct.h "
不知道你这样写的意图,你想想如果这个头文件要要包含两次的话,一这会出错的了
所有头文件都向types.h中那样定义不是很好吗!~~~
我也不知道你的程序包含结构所以不好给你直接的回答
你要么把所有头文件都放上来看看吧!~~~`

[解决办法]
1.有a文件定义字符名称,b引用a,c引用b.这样,在c的程序里除了#include "b.h "
还要不要#include "a.h "?
2.碰到连续多个引用时,是不是每个涉及到的type.h都要加上ifndef?

1. 不要,#include b的时候自动 #include a乐
2. 是的,而且推荐在工程里都这样用
[解决办法]
#ifndef _INCLUDE_TYPE_H_
#define _INCLUDE_TYPE_H_
.
.
.
#endif


无敌方法在所有的头文件里都写上,
然后在CPP文件里任意包含要包含的文件,
而不用去管它会不会重复包含.
因为头文件自身已经有了抗包含性.

[解决办法]
在每个头文件上都加上

#ifndef _INCLUDE_TYPE_H_
#define _INCLUDE_TYPE_H_
.
.
.
#endif

其中_INCLUDE_TYPE_H_需要换成你头文件的名字,这里确定一个唯一的名字就可以了。

如果使用VC系列,可以使用#pragma once,这个和上面的效果是一样的。
你打开stdafx.h,就可以看到里面有这么一句了。
[解决办法]
1、不要,因为你在b.h里已经include a.h了。

2、只要你在每个头文件里都用
#ifndef .....//这里的名称在工程中应该是唯一的
#define .....
.
.
#endif
将本头文件标示,那么你在其他地方重复包含也不会出
问题的。

热点排行