对包含的文件中出现同名函数或变量的解决方法

         有两个不同的文件A.h与B.h。这两个文件中都定义了一个名为Function的函数。现在要同时使用这两个文件,于是包含了这两个文件,但是编译会出错,因为Function重定义。

         但是A.h与B.h是不能修改的,这两个文件又都是必须用到的。

         解决方法如下:    

#define Function FunctionT
#include "A.h"
#undef Function 
#include "B.h" 
         其详细含义为:

#define Function FunctionT	//首先为Function定义一个别名FunctionT
#include "A.h"			//包含A.h。于是会按照上面的别名FunctionT来对A.h中的函数Function进行编译。这样A.h中的函数Function就被修改为FunctionT
#undef Function			//将的FunctionT宏别名释放掉
#include "B.h"			//包含B.h。由于已经释放掉了Function释的宏定义,所以对B.h中的函数Function依然会按Function来编译
        在这个过程中,编译A.h的时候,因为宏定义的原因,会将A.h中的Function函数按照FunctionT这个函数名来编译。然后释放了宏定义,于是FunctionT这个别名就不再存在了。当编译B.h的时候,会依然用Function这个函数名来编译B.h。

        编译通过后,若调用Function函数,只能是调用B.h的Function函数。A.h中的Function函数已经不能使用了,而由于FunctionT也不存在了,所以调FunctionT也是不可以的。

        也就是说,该写法是A.h中的Function屏蔽掉,只可以使用B.h中的Function

        要达到该目的,还可以使用如下写法:

#include "A.h"
#define Function FunctionT
#include "B.h" 
 该写法同样 A.h 中的 Function 屏蔽掉了。因为无论调用Function还是FunctionT,都会因为宏的原因被解析为FunctionT。而FunctionT是 B.h的函数。

        若希望A.hB.h中的Function可以同时使用,那么可以对A.hB.h进行二次封装,更改其冲突的函数名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值