Прямые объявления типов могут использоваться только для разрешения объявлений, включающих указатели и ссылки на этот тип.
До того, как тип полностью определен, компилятор ничего не знает о типе; например какие члены у него есть, или насколько он большой. Следовательно, вы не можете использовать его в качестве члена вашей структуры по значению, потому что компилятор не будет знать, насколько он велик, или его конструкторы и деструкторы являются открытыми. С другой стороны, вы можете делать что-то вроде send_wrapper *_p_sender;
, потому что указатели на структуры всегда имеют одинаковый размер. Но вы все равно не сможете получить доступ к его функциям-членам и т. Д.