请问啥时候用include "XXX.h",什么时候用提前声明class XXX; ?
请问啥时候用include "XXX.h",什么时候用提前声明class XXX; ?
XXX 和 YYY 都是我要定义的类,但是他们可能需要相互调用。所以不太明白。还请各位指教,非常感谢!
[解决办法]
- C/C++ code
class xxx;class yyy{ public: class xxx * x;//must be pointer};class xxx{public: class yyy *y;//must be pointer};
[解决办法]
#include “xxx.h" -------- 包含
class xxx; -------- 前置声明
什么时候需要使用”包含“ (比如说xxx的头文件)
a 需要声明 xxx 类型的对象 或者
b 需要(直接/间接)访问xxx的成员
// 例子1
#include "xxx.h"
class yyy{
xxx x; // rule a
void foo() { cout << x.getSize() << endl;} // rule b
};
// 例子2
#include "xxx.h"
class yyy{
xxx *x; // 如果没有下面的foo()函数,则仅需要前置声明
void foo() { cout << x->getSize() << endl;} // rule b
};
[解决办法]
请问啥时候用include "XXX.h"
============================
当需要 XXX.h 中的信息时, include 之
什么时候用提前声明class XXX;
============================
在没有定义好 XXX时,已经需要使用该类型定义一个指针或者引用【不能是定义实例】,
那么需要使用 前置声明 class XXX;
[解决办法]
只要有可能,就将XXX.h放在YYY.cpp中;而不放在YYY.h中。如此,降低文件间依赖复杂度。
为了支持这种可能性,在YYY.h中,将要使用到的 ccc类型 进行前导声明。
但是,有时候,在YYY.h中,可能要分配 ccc类型 的内存,编译器需要知道它的尺寸。这时候,需要将 XXX.h 放在 YYY.h 中。对于这种情况,更高阶的做法,可以考虑是否采用pImpl惯用手法。