gpt4 book ai didi

C: "array type has incomplete element type"当使用不带 typedef 的结构数组时

转载 作者:行者123 更新时间:2023-12-02 18:26:29 24 4
gpt4 key购买 nike

问题:以下代码片段编译良好(其中两种结构类型都是 typedefed):

typedef struct {
int a;
float b;
} member_struct;

typedef struct {
int a;
double b;
member_struct c;
} outside_struct;

outside_struct my_struct_array[4];

但是,如果“outside_struct”的 typedef 被删除:

typedef struct {
int a;
float b;
} member_struct;

struct {
int a;
double b;
member_struct c;
} outside_struct;

struct outside_struct my_struct_array[4];

我收到错误:“数组类型具有不完整的元素类型'struct Outside_struct'”。如果我还删除“member_struct”的 typedef,则会收到额外错误:“字段‘c’的类型不完整”

问题:为什么会发生这种情况?这里使用 typedef 是绝对必要的吗?在我的代码中,我从不使用 typedef 作为结构类型,因此我正在寻找一种方法来避免这种情况(如果可能的话)。

最佳答案

在此声明中

struct {
int a;
double b;
member_struct c;
} outside_struct;

声明了未命名结构类型的对象outside_struct。名称为 struct Outside_struct 的结构均未声明。

因此编译器在数组声明中发出错误

struct outside_struct my_struct_array[4];

因为在此声明中引入了未定义的类型说明符struct Outside_struct。也就是说,在此声明中,类型说明符 struct Outside_struct 是不完整类型。

您不能声明具有不完整元素类型的数组。

您需要声明一个具有相同标记名称的结构,而不是声明未命名结构的对象outside_struct

struct  outside_struct {
int a;
double b;
member_struct c;
};

关于C: "array type has incomplete element type"当使用不带 typedef 的结构数组时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70081996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com