多次包含一个含有实现的头文件的方法
多次包含一个含有实现的头文件的方法
今天遇到一个变态的需求:
假设有如下几个文件
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的内容不变。
这确实是一个很巧妙的方案,呵呵