字段的类型不完整-联合和结构

时间:2019-06-18 14:18:58

标签: c struct types field union

我有以下类型:

struct netlib_nw {
  int id;
  union netlib_op op;
};

union netlib_op {
  struct netlib_op_readdir op_readdir;
  struct netlib_op_readdir_recv op_readdir_recv;
};

struct netlib_op_readdir {
  char* path;
};

struct netlib_op_readdir_recv {
  char** recv;
};

我拥有它们是因为我想通过包含不同内容的网络转移netlib_nw

这是我得到的错误:

error: field has incomplete type 'union netlib_op'
  union netlib_op op;
                  ^
note: forward declaration of 'union netlib_op'
  union netlib_op op;

如何解决?我不明白那是怎么回事?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

只需重新排列定义:

struct netlib_op_readdir {
    char* path;
};

struct netlib_op_readdir_recv {
    char** recv;
};

union netlib_op {
    struct netlib_op_readdir op_readdir;
    struct netlib_op_readdir_recv op_readdir_recv;
};

struct netlib_nw {
    int id;
    union netlib_op op;
};

问题在于,在原始代码中,在解析netlib_nw时会看到类型为netlib_op的声明,但该类型未定义(因此不完整)。例如,如果您使用的成员是指向netlib_nw的指针或引用,那么一切都会很好,因为您可以将它们与正向声明的类一起使用。

因此,通过重新排列结构,以便按依赖性顺序定义结构,您就可以摆脱错误。