поле имеет неполный тип - союзы и структуры - PullRequest
0 голосов
/ 18 июня 2019

У меня есть эти типы:

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 Ответ

2 голосов
/ 18 июня 2019

Просто переставьте определения:

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, тогда все будет хорошо, поскольку вы можете использовать их с объявленным классом вперед.

Таким образом, переставив структуры так, чтобы они были определеныв порядке зависимости вы избавляетесь от ошибки.

...