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

时间:2013-11-27 11:40:43

标签: c struct

我想在头文件中的不同结构定义中声明一个结构值。所以我在头文件中完成了以下操作。但是编译器给了我错误消息field myStructMember has incomplete type

在A.h头文件中:

struct My_A{
    int value;
};

在B.h头文件中:

struct My_A; // forward declaration
struct My_B
    {
        struct My_A myStructMember; // error is here!
        int differentValue;
    };

是否可以在结构声明中声明结构成员?

编辑: My_A和My_B在不同的头文件中声明。

编辑2: 当我在B.h中添加“A.h”时,它就可以了。它有什么问题吗? 在B.h头文件中:

include "A.h" // added this line insead of forward declaration
struct My_B
    {
        struct My_A myStructMember; // not any error anymore
        int differentValue;
    };

2 个答案:

答案 0 :(得分:1)

错误就是它所说的 - 在你拥有完整类型之前你不能使用struct。你根本就不知道它的大小。前方声明在这里没有帮助。

或者,您可以使用指向struct的指针。指针大小是已知的。

答案 1 :(得分:1)

编译器解析A.h时,B.h(或B.h每次引用时都不包括My_B,否则它缺少确定所需的信息大小My_A。您可以使用指针代替,但这会获得处理它们的所有开销。

如果您只是想实现抽象/细节隐藏,那么您可以更改My_A的前向声明,以便它现在是正确大小的结构(例如,使用char数组)。然后,您必须确保没有任何内容同时包含A.h B.h,因为这会导致编译器错误。哦,确实确保你的尺寸正确或者会发生奇怪的事情。有很多方法可以使用宏断言来确保这是正确的。

e.g。制作B.h

struct My_A{
    char hidden_data[4];
};

struct My_B
{
    struct My_A myStructMember; 
    int differentValue;
};