demiurg1978 1 8 января, 2017 Опубликовано 8 января, 2017 (изменено) · Жалоба Компилятор выдает ошибку Error[Pe041]: expression must have arithmetic or pointer type E:\Work\Projects\DELTA_SKREPER\DELTA_SKREPER\proc_device.c 167 Ошибку выдает при разных вариантах. Не могу понять причину. //======================================================================== typedef struct time_t { u08 hours; u08 minutes; u08 seconds; } time_t; extern struct time_t start_time_list []; //======================================================================== #pragma location = 0x14 __eeprom struct time_t ee_start_time_list [24] = { 0, 0, 0, 1, 0, 0, 2, 0, 0, 3, 0, 0, 4, 0, 0, 5, 0, 0, 6, 0, 0, 7, 0, 0, 8, 0, 0, 9, 0, 0, 10, 0, 0, 11, 0, 0, 12, 0, 0, 13, 0, 0, 14, 0, 0, 15, 0, 0, 16, 0, 0, 17, 0, 0, 18, 0, 0, 19, 0, 0, 20, 0, 0, 21, 0, 0, 22, 0, 0, 23, 0, 0, }; for (u08 i = 0; i < 24; i++) { // if (ee_start_time_list [i] != start_time_list [i]) // ee_start_time_list [i] = start_time_list [i]; struct time_t __eeprom *ptr_1 = ee_start_time_list; struct time_t *ptr_2 = start_time_list; if (*ptr_1 != *ptr_2) *ptr_1 = *ptr_2; ptr_1++; ptr_2++; } Ошибка появляется при проверке if. На этот кусок кода ошибки нет. for (u08 i = 0; i < 24; i++) { //start_time_list [i] = ee_start_time_list [i]; struct time_t *ptr_1 = start_time_list; struct time_t __eeprom *ptr_2 = ee_start_time_list; *ptr_1 = *ptr_2; ptr_1++; ptr_2++; } Изменено 8 января, 2017 пользователем demiurg1978 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 8 января, 2017 Опубликовано 8 января, 2017 · Жалоба Не могу понять причину. Что именно в сообщении "expression must have arithmetic or pointer" Вам непонятно то? Ответьте себе на вопрос, что Вы вознамерились сравнить. На вопрос почему структура не есть ни арифметический тип, ни указатель - ну хотя бы любой букварь по языку Си потрудитесь в руки взять. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg1978 1 8 января, 2017 Опубликовано 8 января, 2017 · Жалоба ... Благодарю. Вы натолкнули на ответ. Решено: if ((ptr_1 -> hours != ptr_2 -> hours) || (ptr_1 -> minutes != ptr_2 -> minutes) || (ptr_1 -> seconds != ptr_2 -> seconds)) *ptr_1 = *ptr_2; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться