头文件循环包含:类似a.h包含b.h;b.h又包含a.h。
例如:
A.h
---------------------
#include "b.h"
#include <cstdio>
int val = 1;
int a() {
b();
printf("A");
return 0;
}
class A {
public:
B* a;
};
B.h
---------------------
#include <cstdio>
#include "a.h"
int b() {
printf("B = %d\n", val);
return 0;
}
class B {
public:
A* a;
};
这时就出现了循环包含,a.h要调用b.h中的内容,而b.h中又要调用a.h中的内容。
那如何避免这样的循环包含呢?
通过利用前置声明的方式实现。都在main.cpp中包含如两个头文件即可。
A.h
---------------------
#include "b.h"
#include <cstdio>
int val = 1;
int b(); // 声明
int a() {
b();
printf("A");
return 0;
}
class A {
public:
B* a;
};
B.h
---------------------
#include <cstdio>
#include "a.h"
int b() {
printf("B = %d\n", val);
return 0;
}
class A; // 声明
class B {
public:
A* a;
};
main.cpp
----------------
#include "a.h"
#include "b.h"
int main() {
b();
a();
return 0;
}