数组类型具有不完整的元素,字段“status”具有不完整的类型

时间:2011-10-21 00:59:39

标签: c

我是编程的NOOB,我真的很难过。当编译此代码时,我得到“数组类型具有不完整的元素和字段'状态'具有不完整类型”错误。我把这与另一堆代码链接起来“谢天谢地,这是免费的”。错误在本节中确定,因此任何帮助将不胜感激。 谢谢。这是C代码

struct name;
struct book;
struct Library{
    struct Book collection[100];
    struct person patrons[100];
    int totalBooks;
    int totalPatrons;
};
struct person{
    char first[32];
    char last[32];
    enum Stat status;
};

struct Book{
    char title[32];
    char author[32];
    int id;
    int year;
    int status;

};
enum Stat{ACTIVE=1, INACTIVE=2, CHECKED_OUT=3, CHECKED_IN=4, UNDER_REPAIR=5, LOST=6};
~            

3 个答案:

答案 0 :(得分:2)

看起来你来自C背景 - 遗憾的是它不是有效的C#代码。

  • 数组定义为char[] first;(此时大小也不相关)
  • 枚举在定义变量时不需要枚举前缀。与结构相同。
  • 您无需为名称和书籍声明结构

事实上,我认为你可能想要使用string变量而不是char数组。

struct Library{
    Book[] collection;
    Person[] patrons;
};

struct Person{
    string first;
    string last;
    Stat status;
};

struct Book{
    string title;
    string author;
    int id;
    int year;
    int status;

};
enum Stat{ACTIVE=1, INACTIVE=2, CHECKED_OUT=3, CHECKED_IN=4, UNDER_REPAIR=5, LOST=6};

答案 1 :(得分:1)

编译器抱怨的代码部分基本上有两个问题:

  1. C区分大小写:struct bookstruct Book是两种不同的类型。
  2. 在C中,在声明之前不能引用类型;也就是说,在定义enum Stat之前,您无法定义enum Stat类型的字段。
  3. 然后,实际问题是编译器不知道struct Book在您尝试定义它们的数组时的位置。同样,它不知道enum Struct在您定义该类型字段的位置是什么。

    (大多数不重要的切线:你得到“不完整类型”错误而不是稍微有用的原因是因为编译器允许你在某些情况下使用你实际上没有的struct类型有完整的定义,但只有当你通过所谓的“不透明”指针使用它们时(也就是说,你实际上从未使用过类型,你只需要将它们传递给它们。)在你的情况下,你告诉你想要的编译器一个struct Book数组,需要一个完全定义的类型,你没有。)

    要修复它,您只需要重新排序类型定义,以便在定义之前不使用它们,并始终使用一致的套管。此外,虽然在您的程序的其余部分继续引用struct fooenum bar是合法的,但大多数人会创建typedef(基本上是类型别名)。例如:

    typedef enum tagStat {
        ACTIVE=1, 
        INACTIVE=2, 
        CHECKED_OUT=3, 
        CHECKED_IN=4, 
        UNDER_REPAIR=5, 
        LOST=6
    } Stat;
    
    typedef struct tagPerson {
        char first[32];
        char last[32];
        Stat status;
    } Person;
    
    typedef struct tagBook {
        char title[32];
        char author[32];
        int id;
        int year;
        int status;
    } Book;
    
    typedef struct tagLibrary {
        Book collection[100];
        Person patrons[100];
        int totalBooks;
        int totalPatrons;
    } Library;
    

答案 2 :(得分:0)

在声明/定义它之前,您似乎试图在Stat的定义中使用person枚举。添加enum Stat;,其中包含文件顶部的struct语句。