【问题标题】:Declare an array of structures声明一个结构数组
【发布时间】:2017-05-07 13:03:23
【问题描述】:

我正在尝试创建一个结构数组,但出现了这个错误:

“错误,数组类型为不完整的元素类型”

typedef struct {
char data[MAX_WORD_SIZE];     
int total_count;       
Occurrence_t reference[MAX_FILES];    
int nfiles;         
} Word_t;

struct Word_t array[a];

【问题讨论】:

  • 您的意思是Word_t array[a];(没有struct)吗?
  • 我建议从“初学者的 C”中删除 typedef。如果长大了,他们无论如何都会放弃它。 :-)
  • @alk - 小心,这样的言论会引发一场激烈的战争(根据经验,因为我同意你的观点:))
  • 我在大学一年级。我刚学会用 typedef 来做,真的不知道另一种方法。但感谢您的帮助,我只需要删除“结构”。谢谢
  • 直接做吧:类型定义:struct Word {...};变量定义:struct Word words[42];

标签: c arrays struct declare


【解决方案1】:

TL;DR

要么改变你的结构定义

struct Word_t {
char data[MAX_WORD_SIZE];     
int total_count;       
Occurrence_t reference[MAX_FILES];    
int nfiles;         
};

或者(而不是两者),数组声明:

Word_t array[a];

你所做的是定义一个未命名的结构,你给它一个带有 typedef 的替代名称。没有struct Word_t,只定义了Word_t 类型。

标签命名空间(您在struct/union/enum 之后使用的名称所在的位置)与全局命名空间(文件范围typedefed 的名称所在的位置)是分开的。

许多程序员觉得拖着struct tag 类型名称很麻烦,你应该总是为结构名称做一个typedef。 Others 觉得这是对 typedef-ing 的滥用,并且关键字传达了很多含义;对他们来说 typedef 是没有任何真正抽象的语法糖。

无论您选择哪种方式编写代码,都要坚持下去,不要混淆这两个命名空间。

【讨论】:

  • 菜鸟错误。谢谢:)
【解决方案2】:

您首先使用的是 typedef,因此您不应该再编写结构了。看这里

typedef struct {
    char data[MAX_WORD_SIZE];     
    int total_count;       
    Occurrence_t reference[MAX_FILES];     
    int nfiles;         
} Word_t;
Word_t array[a];

会有用的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 2020-11-09
    相关资源
    最近更新 更多