[英]cannot declare struct member within a structure in c
我想在头文件中的不同结构定义中声明一个结构值。 所以我在头文件中完成了以下操作。 但编译器给我错误消息field myStructMember has incomplete type
在Ah头文件中:
struct My_A{
int value;
};
在Bh头文件中:
struct My_A; // forward declaration
struct My_B
{
struct My_A myStructMember; // error is here!
int differentValue;
};
是否可以在结构声明中声明结构成员?
编辑: My_A和My_B在不同的头文件中声明。
编辑2:当我在Bh中添加“Ah”时,它就可以了。 它有什么问题吗? 在Bh头文件中:
include "A.h" // added this line insead of forward declaration
struct My_B
{
struct My_A myStructMember; // not any error anymore
int differentValue;
};
错误就是它所说的 - 在你拥有完整类型之前你不能使用struct。 你根本就不知道它的大小。 前方声明在这里没有帮助。
或者,您可以使用指向struct的指针。 指针大小是已知的。
不是没有#,包括在Bh
Ah
(或者在Bh
之前每次引用它时 - 当编译器解析My_B
否则它缺少确定My_A
大小所需的信息。您可以使用指针代替,但这会获得处理的所有开销他们。
如果您只是想实现抽象/细节隐藏,那么您可以更改My_A
的前向声明,以便它现在是正确大小的结构(例如,使用char数组)。 然后你必须确保没有包括Ah
和 Bh
因为这将导致编译器错误。 哦, 真的确保你的尺寸正确或者奇怪的东西会发生。 有一些方法可以使用宏断言确保这是正确的。
比如做Bh
struct My_A{
char hidden_data[4];
};
struct My_B
{
struct My_A myStructMember;
int differentValue;
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.