如何多次包含一个含有实现的头文件

今天遇到一个变态的需求:

假设有如下几个文件

a.h,b.cpp,c.cpp ,其内容分别为

//a.h的内容

void f();

void f(){}

//b.cpp的内容

#include "a.h"

void call()

{

     f();

}

 

//c.cpp的内容

#include "a.h"

#include "b.h"

int main(int argc, char* argv)

{

     f();

}

编译上面三个文件,会出错,因为 函数f的实现被包含了多次,由于设计要求f的声明和实现必须放在同一个头文件中,而这个头文件有可能被多个其他的文件包含,如何解决这个冲突。

经网友flw指点,可以把声明和实现分别包在两个宏中,然后在一个实现文件中定义实现宏即可。

最终的解决办法如下:

//a.h的内容

#ifndef  AHEAD

#define AHEAD

void f();

#endif

#ifdef ABODY

void f(){}

#endif

//b.cpp的内容

#define ABODY

#include "a.h"

void call()

{

     f();

}

 c.cpp的内容不变。

这确实是一个很巧妙的方案,呵呵

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值