我有一个名为' residence'下面。它包含一个person_list
结构,其中person_list
结构包含每个人的结构。
typedef struct a_person
{
char name [MAX_LENGTH];
int age;
} person;
typedef struct person_list
{
struct person people[MAX_ALLOWED];
} personList;
struct residence {
char residence_name [MAX_LENGTH];
struct personList resident_list;
};
我在编译时遇到这些错误:
error: resident_list; has incomplete type
error: array type has incomplete element type (@struct person
people[MAX_ALLOWED];)
如果您需要其他代码或信息,请不要犹豫,
答案 0 :(得分:1)
您可以预先声明您要进一步定义的每个struct
,例如使用
struct a_person; // should be person_st
struct person_list; // should be person_list_st
然后你可能会指向这样的struct
(即使还没有定义struct
的字段)。
但是,当您通过列出其所有字段来定义struct
时,每个字段都应具有编译器已知的大小。
一些进一步的提示(包括惯例):
struct
标记命名,例如_st
(这是惯例 我喜欢关注)您可以与typedef
声明一起制作struct
,例如
typedef struct a_person_st Person;
BTW,我遵循惯例(受GTK启发),结构类型以大写字母开头。
typedef
作为指针。作为指针类型在C中非常重要,我觉得它应该保持明显。所以我建议反对typedef Person*PersonPtr;
稍后您可以通过列出其字段来定义struct
,例如
struct person_st { // or Person
char name[MAX_LENGTH];
int age;
}; // end of definition of struct person_st
您可能感兴趣(假设C99或C11编译器)flexible array members(它是一个C功能,而不是C ++编程,而且灵活的数组成员总是是最后一个其中包含struct
)。