Avatar ·

什么时候可以在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是合适的,以及如何正确使用它。