C 数组类型的元素和字段不完整';状态';有不完整的类型
我是个编程高手,我真的被难住了。在编译这段代码时,我发现“数组类型的元素不完整,字段‘status’的类型不完整”错误。我把它与另一堆代码联系起来,“谢天谢地,它没有错误”。错误在本节中被识别,因此任何帮助都将不胜感激。 非常感谢。这是C代码C 数组类型的元素和字段不完整';状态';有不完整的类型,c,C,我是个编程高手,我真的被难住了。在编译这段代码时,我发现“数组类型的元素不完整,字段‘status’的类型不完整”错误。我把它与另一堆代码联系起来,“谢天谢地,它没有错误”。错误在本节中被识别,因此任何帮助都将不胜感激。 非常感谢。这是C代码 struct name; struct book; struct Library{ struct Book collection[100]; struct person patrons[100]; int totalBooks;
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键会发布注释!在你的代码中,你用nenum
prefix-您不需要在C#中执行此操作(但您在C中执行了)。另一点,C#中的enum通常是驼峰式的,在这种情况下,不需要为每个位置分配值。非常感谢。但我有