Avatar ·

Quando posso usar forward declaration em C++?

Olá a todos! Estou estudando C++ e constantemente me deparo com o termo "forward declaration". Acho que entendo o que é, mas não está totalmente claro quando *preciso* usá-lo e quando isso só vai complicar as coisas.\n\nPor exemplo, tenho duas classes: `A` e `B`. A classe `A` contém um ponteiro para `B`, e a classe `B` contém um objeto `A` por valor. Estou tentando escrever algo assim:\n\n```cpp\n// A.h\n#include "B.h"\nclass A {\n B* ptr;\n};\n\n// B.h\n#include "A.h"\nclass B {\n A obj;\n};\n```\n\nNaturalmente, isso não compila por causa da dependência cíclica. Ouvi dizer que posso usar forward declaration para quebrar esse ciclo. Mas como exatamente? E em que outras situações isso é aplicado?\n\nTambém vi que em arquivos de cabeçalho às vezes escrevem `class MyClass;` antes da definição.