Разбираем, как предварительное объявление (
forward declaration) помогает “облегчать” заголовки в C++: что именно знает компилятор после
struct/
class
X
;, где можно использовать неполный тип (указатели/ссылки), где нельзя (хранение по значению, доступ к полям, контейнеры), как выстроить правило «
.hpp — декларации,
.cpp — тяжёлые
#include», и какие типичные ошибки приводят к сообщениям про
incomplete type.