Компилятор считает, что структура является указателем на структуру - PullRequest
0 голосов
/ 29 ноября 2011

Я объявляю массив структур и хочу объявить секунду, в которую я могу сделать копию для повторной инициализации структуры в начале каждого модульного теста.

Итак, я объявляю в 2файлы заголовков

extern peripheralsArray_t Peripherals;  
extern peripheralsArray_t DefaultPeripherals;

и в файлах 2 c

peripheralsArray_t Peripherals =
{... init  values };
peripheralsArray_t DefaultPeripherals;

НО, когда я пытаюсь назначить DefaultPeripherals = Peripherals; компилятор GCC (под Cygwin), он говорит

error: incompatible types when assigning 
       to type ‘peripheralsArray_t’ from type ‘struct _peripherals *’

Почему он думает, что Peripherals является указателем?

Ответы [ 2 ]

2 голосов
/ 29 ноября 2011

Вы не можете присвоить массиву. Я предполагаю, что peripheralsArray_t это массив typedef'd (что тоже почти всегда плохая идея).

2 голосов
/ 29 ноября 2011

Предполагая, что ваши имена типов являются описательными, а peripheralsArray_t действительно является массивом .

C не поддерживает присвоение массива, что вы и пытаетесь сделать.

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

...