Как объявить массив структур в C - PullRequest
0 голосов
/ 01 марта 2019

У меня проблемы с объявлением массива структур перед заполнением их данными.

Моя структура выглядит следующим образом:

typedef struct {
  uint8_t * p_data;     ///< Pointer to the buffer holding the data.
  uint8_t   length;     ///< Number of bytes to transfer.
  uint8_t   operation;  ///< Device address combined with transfer direction.
  uint8_t   flags;      ///< Transfer flags (see @ref NRF_TWI_MNGR_NO_STOP).
} nrf_twi_mngr_transfer_t;

И в своем коде я пытаюсь объявитьмассив такой:

struct nrf_twi_mngr_transfer_t start_read_transfer[10];

Однако я получаю ошибку компиляции:

тип массива имеет неполный тип элемента 'struct nrf_twi_mngr_transfer_t'

У меня естьискал вокруг, как я думал, должно быть обычным делом, но я не могу понять, что я делаю неправильно.Может быть, потому что один из элементов является указателем?Но этот указатель должен быть фиксированного размера, верно?

Большое спасибо

1 Ответ

0 голосов
/ 01 марта 2019

Похоже, некоторые объяснения в порядке.Этот код

typedef struct {
    //...
} nrf_twi_mngr_transfer_t;

уже определяет тип , который можно использовать напрямую.Напротив,

struct nrf_twi_mngr_transfer_struct {
    //...
};

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

В результате, учитывая два приведенных выше определения, вы должны определить свои массивы по-разному:

nrf_twi_mngr_transfer_t arr[10]; // if using typedef
struct nrf_twi_mngr_transfer_struct arr2[10]; // if using struct with no typedef

И на случай, если вам интересно,

struct {
    //...
} nrf_twi_mngr_transfer_obj;

Определяетобъект анонимного типа структуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...