//HEAD1.H
#ifndef __HEAD_1_H__
#define __HEAD_1_H__ //防止多次包含,重复定义
#include "head2.h"
#define VAR_MACRO 1 //define a macro, which used in head2.h
bool func(ClassA* CA); //ClassA is defined in head2.h
#endif
#ifndef __HEAD_2_H__
#define __HEAD_2_H__ //防止多次包含,重复定义
#include "head1.h"
class ClassA{
int mVar;
void setMem(){ mVar = VAR_MACRO }; //macro VAR_MACRO is defined in head1.h
};
#endif
将以上两文件分别展开有:
HEAD1.h
class ClassA{
int mVar;
void setMem(){ mVar = VAR_MACRO }; // VAR_MACRO 未定义
... //other members and functions
};
#define VAR_MACRO 1 //define a macro, which used in head2.h
bool func(ClassA* CA); //ClassA is defined in head2.h
HEAD2.h
#define VAR_MACRO 1 //define a macro, which used in head2.h
bool func(ClassA* CA); //ClassA *CA未定义
class ClassA{
int mVar;
void setMem(){ mVar = VAR_MACRO }; //macro VAR_MACRO is defined in head1.h
... //other members and functions
};
若相互包含,则有可能出现 未定义的情况。