我是编程的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};
~
答案 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)
编译器抱怨的代码部分基本上有两个问题:
struct book
和struct Book
是两种不同的类型。enum Stat
之前,您无法定义enum Stat
类型的字段。然后,实际问题是编译器不知道struct Book
在您尝试定义它们的数组时的位置。同样,它不知道enum Struct
在您定义该类型字段的位置是什么。
(大多数不重要的切线:你得到“不完整类型”错误而不是稍微有用的原因是因为编译器允许你在某些情况下使用你实际上没有的struct
类型有完整的定义,但只有当你通过所谓的“不透明”指针使用它们时(也就是说,你实际上从未使用过类型,你只需要将它们传递给它们。)在你的情况下,你告诉你想要的编译器一个struct Book
数组,需要一个完全定义的类型,你没有。)
要修复它,您只需要重新排序类型定义,以便在定义之前不使用它们,并始终使用一致的套管。此外,虽然在您的程序的其余部分继续引用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;
答案 2 :(得分:0)
在声明/定义它之前,您似乎试图在Stat
的定义中使用person
枚举。添加enum Stat;
,其中包含文件顶部的struct语句。