Avatar ·

¿Cuándo se puede usar la declaración anticipada (forward declaration) en C++?

¡Hola a todos! Estoy aprendiendo C++ y constantemente me encuentro con el término "forward declaration" (declaración anticipada). Creo que entiendo qué es, pero no tengo claro cuándo *debo* usarlo y cuándo solo complicará las cosas. Por ejemplo, tengo dos clases: `A` y `B`. La clase `A` contiene un puntero a `B`, y la clase `B` contiene un objeto de `A` por valor. Intento escribir algo así: ```cpp // A.h #include "B.h" class A { B* ptr; }; // B.h #include "A.h" class B { A obj; }; ``` Naturalmente, esto no compila debido a la dependencia cíclica. He oído que se puede usar forward declaration para romper este ciclo. Pero ¿cómo exactamente? ¿Y en qué otras situaciones se aplica? También he visto que en los archivos de encabezado a veces escriben `class MyClass;` antes de la definición de la clase. ¿Por qué es necesario si puedo simplemente incluir el archivo de encabezado con la definición completa? ¿No sería el código más limpio y claro? Explíquenme, por favor, con ejemplos: cuándo forward d