Страница 1 из 1

Двойное декларирование

Добавлено: 20 фев 2017, 17:41
RedSky
При компиляции ошибка:   pr48.ino:313:5: error: redeclaration of 'int _tempVariable_int'
                                         pr48.ino:245:5: error: 'int _tempVariable_int' previously declared here

Появляется при использовании стека или детектора изменения числа в больших проектах.
Если убрать одну строку с int _tempVariable_int работает нормально.

Двойное декларирование

Добавлено: 20 фев 2017, 22:22
Boroda
Ну тут все предельно ясно!
Пользователь rw6cm видимо использовал в своем Пользовательском Блоке (ПБ) T=00^00 переменную, которая используется в стандартных блоках FLProg. А именно: _tempVariable_int;

Вот и возникает конфликт ПБ блока и массива!

А объясняется такой конфликт просто: переменные ПБ, объявленные в секции Loop(), не имеют уникального идентификатора. Если бы он эту переменную объявил в секции Declare, тогда FLProg присвоила бы ей уникальный идентификатор.

Поставьте два блока T=00^00 и получите еще кучу ошибок:

int _tempVariable_int;
bool  _tmp2 = _changeNumber2_Out_938015_1;
............
int _tempVariable_int;
bool  _tmp2 = _changeNumber2_Out_938015_3;

Вывод: переменные ПБ нужно объявлять только в секции Declare!!!

Двойное декларирование

Добавлено: 21 фев 2017, 03:55
support
И второй вопрос, у Вас какая версия программы? такая ошибка наблюдалась в старых версиях. Я попробовал открыть проект в версии 2.3.0 (самая ранняя из установленных у меня) и никаких проблем в при компиляции не возникло. Хотя есть предупреждение что осталось мало свободной памяти, и возможна нестабильная работа.

Двойное декларирование

Добавлено: 21 фев 2017, 08:09
Boroda
support, я в 2.3.1 проверял. В прикрепленной программе в блоке T=00^00 переменная объявлена в секции Loop() (не имеет уникального идентификатора) и такая же переменная используется в стандартном массиве.

П.С.
RedSky писал(а):Появляется при использовании стека или детектора изменения числа в больших проектах.
Это работает нормально.

Двойное декларирование

Добавлено: 21 фев 2017, 09:19
rw6cm
Boroda писал(а):Пользователь rw6cm видимо использовал в своем Пользовательском Блоке (ПБ) T=00^00 переменную, которая используется в стандартных блоках FLProg. А именно: _tempVariable_int;
Прозевал этот момент, спасибо за подсказку.
RedSky, замените блок на этот.
Вечером в блоках пользователей обновлю.

Двойное декларирование

Добавлено: 21 фев 2017, 10:44
RedSky
Спасибо, проверил - работает.
Версия последняя. IDE 1.6.3. В 1.8 у меня не работает кириллица на 5110.

Двойное декларирование

Добавлено: 22 фев 2017, 15:59
tok17
support писал(а):такая ошибка наблюдалась в старых версиях. Я попробовал открыть проект в версии 2.3.0 (самая ранняя из установленных у меня) и никаких проблем в при компиляции не возникло. Хотя есть предупреждение что осталось мало свободной памяти, и возможна нестабильная работа.
 
У меня так же происходило. Первый раз не разобрался в чем причина, перенес все блоки в новый проект, ошибка с дублированием исчезла.
Сейчас возникла на Меге. Свободной памяти много, версия 2,3,1
Вычищаю лишние строки в ручную:
1. Servo _SM1;
OneWire  _ow10(10);
OneWire  _ow9(9);
OneWire  _ow10(10);
OneWire  _ow9(9);

2. переменная перестала дублироваться... не понятно...

Двойное декларирование

Добавлено: 23 фев 2017, 10:39
RedSky
Такое происходит при копировании и вставке из другого проекта. Нужно удалить и заново создать блоки поиска и опроса DS18B20.