#c #struct
#c #структура
Вопрос:
Чтобы сделать мой код как можно более понятным, я пытаюсь сделать что-то вроде :
struct Test {
int a;
int b;
struct Test2 c;
};
struct Test2{
int d;
};
Конечно, этот код неверен, потому что struct Test2
используется до определения. Я хочу объявить структуру вперед. Итак, я набрал struct Test2;
раньше struct Test
, но это не сработало. Есть ли решение?
Я знаю, что это возможно с функциями, так что, может быть, так должно быть и для структур?
Ответ №1:
Причина, по которой это невозможно, заключается в том, что когда вы помещаете конкретный struct Test2
объект внутрь struct Test
, вам нужно знать размер Test2
, чтобы определить размер Test
. Но вы не можете знать размер, не зная сначала полного определения.
Прямые объявления позволяют вам использовать указатель на тип, поскольку вы можете указать на что-то, не зная подробностей до более позднего времени. Хотя это может не полностью удовлетворить ваши потребности, вы могли бы сделать что-то вроде следующего с прямым объявлением:
struct Test {
int a;
int b;
struct Test2 *c;
};
Причина, по которой объявление функции работает, заключается в том, что оно сообщает вам все, что вам нужно знать о том, как взаимодействовать с функцией. Для этого вам не нужна сама функция.
Ответ №2:
Это работает, только если struct Test
содержит указатель типа struct Test2*
. Если она содержит экземпляр, struct Test2
должна быть определена раньше struct Test
, потому что размер struct Test2
должен быть известен.