什么时候可以在C++中使用前置声明?
大家好!我正在学习C++,经常遇到术语"forward declaration"(前置声明)。我似乎理解它是什么,但不完全清楚什么时候*必须*使用它,什么时候它只会让事情变得更复杂。
例如,我有两个类:`A`和`B`。类`A`包含一个指向`B`的指针,而类`B`包含一个按值存储的`A`对象。我尝试这样写:
```cpp
// A.h
#include "B.h"
class A {
B* ptr;
};
// B.h
#include "A.h"
class B {
A obj;
};
```
自然,这由于循环依赖而无法编译。我听说可以使用前置声明来打破这个循环。但具体怎么做?还有哪些其他情况会用到它?
另外,我注意到在头文件中有时会在类定义之前写`class MyClass;`。为什么需要这样,而不是直接包含完整定义的头文件?毕竟这样代码会更干净、更清晰?
请通过示例解释:什么时候使用forward declaration是合适的,以及如何正确使用它。