处理C中的不完整类型错误

时间:2015-04-01 20:13:37

标签: c

我有一个名为' 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];)

如果您需要其他代码或信息,请不要犹豫,

1 个答案:

答案 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)。