C/C++前向声明
2018-10-09 本文已影响0人
cx7
C/C++前向声明
前向声明是为了
1. 避免头文件循环引用
2. 避免引入头文件
头文件循环引用
如果类A包含了类B 而B.h包含了A.h就会造成头文件的循环引用
#include "B.h"
class A {
private:
B *b;
};
#include "A.h"
class B {
};
因为编译器在编译到B.cpp时 会先处理A.cpp 然而A.cpp中引用了B 会导致死循环错误
解决方法是在A.cpp中前向声明B 告诉编译器B是一个类 编译时先跳过
#include "B.h"
class B;
class A {
private:
B *b;
};
避免引入头文件
如果类A用到了某个内部的类 打包时就不得不把内部的头文件也对外开放
库的开发者肯定不希望对外暴露内部的细节 所以需要利用前向声明跳过
#include "B.h"
class A {
private:
B* b;
}
可以改为 去除对B.h的引用 改为在A.cpp中引用B.h
class B;
class A {
private:
B* b;
};
如果类A在命名空间test中 则这样声明
namespace test {
class B;
}