Можно ли создать массив объявленных, но не определенных типов? Вот что я хотел бы сделать:
typedef struct _indiv indiv;
typedef indiv pop[];
и пусть кто-то другой решит, что на самом деле являются членами индивидуума, определив struct _indiv в другом файле .c или .h (а затем связав все вместе).
(В семантике индивид - это индивидуум, а поп - это популяция индивидов.)
Но компилятор жалуется:
error: array type has incomplete element type
Я мог бы заменить второй typedef на
typedef indiv * pop;
И использовать pop как массив, получая доступ к таким элементам, как p[i]
(с p типа pop), но если я это сделаю, компилятор пожалуется, что
error: invalid use of undefined type ‘struct _indiv’
error: dereferencing pointer to incomplete type
Я полагаю, поскольку typedef struct _indiv indiv
является только объявлением, компилятор не знает во время компиляции (до связывания), сколько места требуется структуре и что ей не нравится, что запрещает делать то, что я пробовать. Но я хотел бы знать, почему и есть ли способ добиться того, чего я хочу.
Спасибо