繁体   English   中英

不能在c中的结构中声明struct成员

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM