Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 数组类型的元素和字段不完整';状态';有不完整的类型_C - Fatal编程技术网

C 数组类型的元素和字段不完整';状态';有不完整的类型

C 数组类型的元素和字段不完整';状态';有不完整的类型,c,C,我是个编程高手,我真的被难住了。在编译这段代码时,我发现“数组类型的元素不完整,字段‘status’的类型不完整”错误。我把它与另一堆代码联系起来,“谢天谢地,它没有错误”。错误在本节中被识别,因此任何帮助都将不胜感激。 非常感谢。这是C代码 struct name; struct book; struct Library{ struct Book collection[100]; struct person patrons[100]; int totalBooks;

我是个编程高手,我真的被难住了。在编译这段代码时,我发现“数组类型的元素不完整,字段‘status’的类型不完整”错误。我把它与另一堆代码联系起来,“谢天谢地,它没有错误”。错误在本节中被识别,因此任何帮助都将不胜感激。 非常感谢。这是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};
~            

在声明/定义
person
之前,您似乎试图在定义
person
时使用
Stat
enum。添加
enum Stat
其中,struct语句位于文件顶部。

在声明/定义
person
之前,您似乎试图在定义
person
时使用
Stat
枚举。添加
enum Stat文件顶部有struct语句。

看起来您来自C语言背景-不幸的是,它不是有效的C代码

  • 数组首先定义为
    char[](此时尺寸也不相关)
  • 定义变量时,枚举不需要枚举前缀。结构也一样
  • 您不需要为name和book声明结构
事实上,我认为您可能希望使用
字符串
变量而不是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};

看起来您来自C语言背景-不幸的是,它不是有效的C代码

  • 数组首先定义为
    char[](此时尺寸也不相关)
  • 定义变量时,枚举不需要枚举前缀。结构也一样
  • 您不需要为name和book声明结构
事实上,我认为您可能希望使用
字符串
变量而不是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};

编译器所抱怨的代码部分基本上有两个错误:

  • C区分大小写:
    structbook
    structbook
    是两种不同的类型
  • 在C语言中,在声明类型之前不能引用它;也就是说,在定义
    enum Stat
    之前,不能定义类型为
    enum Stat
    的字段
  • 那么,实际的问题是,在您试图定义一个结构书数组时,编译器不知道它是什么。类似地,它不知道在定义该类型的字段时,枚举结构是什么

    (主要是不重要的相切:之所以会出现“不完整类型”错误,而不是一些稍微有用的错误,是因为编译器允许您在某些情况下使用实际上没有完整定义的
    struct
    类型,但仅当您通过所谓的“不透明”指针使用它们时(也就是说,你从来没有真正使用过类型,你只是到处传递指向它们的指针。)在你的例子中,你告诉编译器你想要一个
    structbook
    数组,它需要一个完全定义的类型,而你没有。)

    要修复它,您只需重新排序您的类型定义,以便在定义之前不使用任何类型定义,并在整个过程中使用一致的大小写。此外,虽然在程序的其余部分继续引用
    struct foo
    enum 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;
    

    编译器所抱怨的代码部分基本上有两个错误:

  • C区分大小写:
    structbook
    structbook
    是两种不同的类型
  • 在C语言中,在声明类型之前不能引用该类型;也就是说,在定义
    enum Stat
    之前不能定义类型为
    enum Stat
    的字段
  • 那么,实际的问题是,编译器不知道在您试图定义它们的数组时,
    struct Book
    是什么。同样,它也不知道在您定义该类型字段时,
    enum struct
    是什么

    (主要是不重要的相切:之所以会出现“不完整类型”错误,而不是一些稍微有用的错误,是因为编译器允许您在某些情况下使用实际上没有完整定义的
    struct
    类型,但仅当您通过所谓的“不透明”指针使用它们时(也就是说,你从来没有真正使用过类型,你只是到处传递指向它们的指针。)在你的例子中,你告诉编译器你想要一个
    structbook
    数组,它需要一个完全定义的类型,而你没有。)

    要修复它,您只需重新排序您的类型定义,以便在定义之前不使用任何类型定义,并在整个过程中使用一致的大小写。此外,虽然在程序的其余部分继续引用
    struct foo
    enum 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;
    

    @Ralfonsothank非常感谢你的回答。我尝试了你所说的,但仍然得到相同的错误。@Ralfonsothank非常感谢你的回答。我尝试了你所说的,但仍然得到相同的错误。谢谢你的回答。实际上,我一个月前就开始了。我正在尝试的是在库结构中包含一系列书籍结构。并且你介意再解释一下你的枚举答案吗?老实说,我可能会回到绘图板上,因为我认为结构不是这里的正确选择。我会考虑将所有内容更改为类和属性,但这是我个人的偏好。哦,按enter键会发布注释!在你的代码中,你用n
    enum
    prefix-您不需要在C#中执行此操作(但您在C中执行了)。另一点,C#中的enum通常是驼峰式的,在这种情况下,不需要为每个位置分配值。非常感谢。但我有