Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 字段的类型不完整-联合&;结构_C_Struct_Types_Field_Union - Fatal编程技术网

C 字段的类型不完整-联合&;结构

C 字段的类型不完整-联合&;结构,c,struct,types,field,union,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 {

我有以下几种:

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\u nw
,里面有不同的东西

以下是我得到的错误:

error: field has incomplete type 'union netlib_op'
  union netlib_op op;
                  ^
note: forward declaration of 'union netlib_op'
  union netlib_op op;
如何解决这个问题?我不明白这是怎么回事


谢谢你的帮助

只需重新排列定义:

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
的指针或引用,那么一切都会很好,因为您可以将它们与前向声明的类一起使用


因此,通过重新排列结构,使其按照依赖关系的顺序定义,您可以消除错误。

只需重新排列定义:

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
的指针或引用,那么一切都会很好,因为您可以将它们与前向声明的类一起使用


因此,通过重新排列结构,使它们按照依赖关系的顺序定义,您可以消除错误。

就像您所做的那样,编译器从上到下读取源文件。正如您所做的,如果遇到以前未在任何地方定义过的类型的变量声明,它会感到困惑。就像您所做的一样,编译器从上到下读取源文件。和您一样,如果它遇到一个以前没有在任何地方定义过的类型的变量声明,它也会感到困惑。