在另一个结构中向前声明的结构数组
array of forward declared struct in another struct
我正在尝试转发声明一个结构 A 并定义一个包含 A 数组的结构 B。
我收到错误说明 'incomplete type not allowed'
这是我的:
struct A;
struct B
{
// something
struct A x[10]; // This where I get the error incomplete type not allowed
};
struct A
{
// something
};
我做错了什么?
作为解决方法,您可以将指向结构 A 的指针声明为这样
struct B
{
// something
struct A * x;
};
这是因为如果你有这样一行
struct B b;
b
将有一个成员 x[10]
。如果你没有完全声明 struct A,struct B 就不知道如何分配 10 个 struct A 元素。在解决方法中,如果您只声明一个指针,则结构 B 不需要知道如何分配结构 A 而只需要知道如何分配一个指针。
"incomplete type" (MSDN) 是一种类型,编译器在翻译单元的给定点不知道其详细信息。在 struct B
的成员声明中,编译器不知道类型的大小 (sizeof (struct A)
),因此不知道要为它保留多少 space。不允许 struct
不完整类型成员的另一个原因是,如果可以的话,这将允许 "circular composition" 其中 struct A
包含类型 struct B
的成员,反之亦然。我什至不知道如何定义这种圆形合成结果的大小。
解决方法:
- 要在
struct B
中按值包含 struct A
,请先完成类型。将 struct A
的成员声明移到 struct B
. 的上方
- A
struct
允许包含指向不完整类型的指针作为成员。在 struct B
中包含一个指针数组 (struct A *x[10];
) 然后用单独分配的 struct A
类型的对象填充它,可能通过一些调用 malloc(sizeof(struct A))
的工厂来填充它的成员, 和 returns 指针。然后您负责释放这些实例使用的内存。
我正在尝试转发声明一个结构 A 并定义一个包含 A 数组的结构 B。 我收到错误说明 'incomplete type not allowed'
这是我的:
struct A;
struct B
{
// something
struct A x[10]; // This where I get the error incomplete type not allowed
};
struct A
{
// something
};
我做错了什么?
作为解决方法,您可以将指向结构 A 的指针声明为这样
struct B
{
// something
struct A * x;
};
这是因为如果你有这样一行
struct B b;
b
将有一个成员 x[10]
。如果你没有完全声明 struct A,struct B 就不知道如何分配 10 个 struct A 元素。在解决方法中,如果您只声明一个指针,则结构 B 不需要知道如何分配结构 A 而只需要知道如何分配一个指针。
"incomplete type" (MSDN) 是一种类型,编译器在翻译单元的给定点不知道其详细信息。在 struct B
的成员声明中,编译器不知道类型的大小 (sizeof (struct A)
),因此不知道要为它保留多少 space。不允许 struct
不完整类型成员的另一个原因是,如果可以的话,这将允许 "circular composition" 其中 struct A
包含类型 struct B
的成员,反之亦然。我什至不知道如何定义这种圆形合成结果的大小。
解决方法:
- 要在
struct B
中按值包含struct A
,请先完成类型。将struct A
的成员声明移到struct B
. 的上方
- A
struct
允许包含指向不完整类型的指针作为成员。在struct B
中包含一个指针数组 (struct A *x[10];
) 然后用单独分配的struct A
类型的对象填充它,可能通过一些调用malloc(sizeof(struct A))
的工厂来填充它的成员, 和 returns 指针。然后您负责释放这些实例使用的内存。