Причина, по которой это невозможно, заключается в том, что когда вы помещаете конкретный struct Test2
объект внутрь struct Test
, вам необходимо знать размер Test2
, чтобы определить размер Test
.Но вы не можете узнать размер, не зная сначала полного определения.
Форвардные объявления позволяют вам использовать указатель на тип, так как вы можете указывать на что-то, не зная деталей позже.Хотя это может не полностью удовлетворить ваши потребности, вы могли бы сделать что-то вроде следующего с предварительным объявлением:
struct Test {
int a;
int b;
struct Test2 *c;
};
Причина, по которой объявление функции работает, состоит в том, что она сообщает вам все, что вынужно знать о том, как взаимодействовать с функцией.Вам не нужна сама функция для этого.