我有以下类型:
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;
如何解决?我不明白那是怎么回事?
感谢您的帮助!
答案 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
的指针或引用,那么一切都会很好,因为您可以将它们与正向声明的类一起使用。
因此,通过重新排列结构,以便按依赖性顺序定义结构,您就可以摆脱错误。