powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Передача set of enum в качестве параметра функции
8 сообщений из 8, страница 1 из 1
Передача set of enum в качестве параметра функции
    #39676031
Фотография Virtual Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Столкнулся с незнакомой проблемой.
Видел, что где-то на форуме обсуждалось, но найти не смог... :(
Объявил типы:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  // Режим "переброски" объектов и списков
  TAssignMode = (amClear,    // режим с очисткой
                 amCatalog,  // присвоение каталожных значений с поиском объектов по идентификатору
                 amValue,    // переброска с присвоением величин
                 amSpecial,  // переброска специальных значений
                 amAppend,   // добавление недостающих элементов
                 amSync      // синхронизация
                 );
  // Режим [] - обычный режим
  TAM = set of TAssignMode;


и хочу использовать в качестве параметра процедур для "переброски" списков (использую Generics):
Код: pascal
1.
procedure Assign(Source: TEnMapSourceLinks; AObjects: TNObjects; AFuels: TFuelTypes; const Mode: TAM = []);


У элементов списков есть аналогичные функции, типа:
Код: pascal
1.
2.
procedure Assign(Source: TEnMapSourceLink; const Mode: TAM = [amClear]); overload;
procedure Assign(Source: TEnMapSourceLink; AObjects: TNObjects; AFuels: TFuelTypes; const Mode: TAM = []); overload;


которые вызываются внутри процедур присвоения списков.

При вызове, в некоторых случаях параметр Mode передается правильно, но периодически, при дальнейшей передаче внутри функции к дочерним элементам, Mode доходит неверно.
Например: передаю Mode = [amSync] а доходит Mode = [amAppend, amSync (6) out of bounds] , или нечто другое.

Подскажите, кто в курсе, что бы это могло быть?
...
Рейтинг: 0 / 0
Передача set of enum в качестве параметра функции
    #39676083
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Virtual StudentПодскажите, кто в курсе, что бы это могло быть?
Чудес не бывает. Ошибка в коде.
...
Рейтинг: 0 / 0
Передача set of enum в качестве параметра функции
    #39676180
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Virtual StudentПодскажите, кто в курсе, что бы это могло быть?Наиболее вероятно - повреждение памяти. Ставьте FastMM и смотрите
Virtual StudentВидел, что где-то на форуме обсуждалось, но найти не смог... :(Там был баг компилятора на x64 http://www.sql.ru/forum/1116921-1/delphi-bagi-s-set-pri-x64
...
Рейтинг: 0 / 0
Передача set of enum в качестве параметра функции
    #39676461
Фотография Virtual Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо! Разобрался.

Решилось переименованием TAM в TAMode . Видимо, где-то пересекались имена с родными внутренними.

P.S.: Я с подобным сталкивался, когда завел класс TUser . Он пересекался с TUser из WinAPI.SystemRT.pas и валилась внутренняя ошибка среды.
...
Рейтинг: 0 / 0
Передача set of enum в качестве параметра функции
    #39676600
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Virtual StudentРешилось переименованием TAM в TAMode .
По хорошему это делается чуть иначе:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  // Режим "переброски" объектов и списков
  TAssignMode = (amClear,    // режим с очисткой
                 amCatalog,  // присвоение каталожных значений с поиском объектов по идентификатору
                 amValue,    // переброска с присвоением величин
                 amSpecial,  // переброска специальных значений
                 amAppend,   // добавление недостающих элементов
                 amSync      // синхронизация
                 );
  // Режим [] - обычный режим
  TAssignModes = set of TAssignMode;
...
Рейтинг: 0 / 0
Передача set of enum в качестве параметра функции
    #39677209
Фотография Virtual Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanVirtual StudentРешилось переименованием TAM в TAMode .
По хорошему это делается чуть иначе:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  // Режим "переброски" объектов и списков
  TAssignMode = (amClear,    // режим с очисткой
                 amCatalog,  // присвоение каталожных значений с поиском объектов по идентификатору
                 amValue,    // переброска с присвоением величин
                 amSpecial,  // переброска специальных значений
                 amAppend,   // добавление недостающих элементов
                 amSync      // синхронизация
                 );
  // Режим [] - обычный режим
  TAssignModes = set of TAssignMode;


Да ладно, еще с именованием заморачиваться. Хотя изначально так оно и было...
...
Рейтинг: 0 / 0
Передача set of enum в качестве параметра функции
    #39677215
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Virtual StudentДа ладно, еще с именованием заморачиватьсяРекомендую не заморачиваться.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  // Режим "переброски" объектов и списков
  TT_1 = (tt1,    // режим с очисткой
             tt2,  // присвоение каталожных значений с поиском объектов по идентификатору
             tt3,    // переброска с присвоением величин
             tt4,  // переброска специальных значений
             tt5,   // добавление недостающих элементов
             tt6      // синхронизация
    );
  // Режим [] - обычный режим
  TT_2 = set of TT_1;

Комментарии же есть
...
Рейтинг: 0 / 0
Передача set of enum в качестве параметра функции
    #39677248
Фотография Virtual Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Virtual StudentДа ладно, еще с именованием заморачиватьсяРекомендую не заморачиваться.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  // Режим "переброски" объектов и списков
  TT_1 = (tt1,    // режим с очисткой
             tt2,  // присвоение каталожных значений с поиском объектов по идентификатору
             tt3,    // переброска с присвоением величин
             tt4,  // переброска специальных значений
             tt5,   // добавление недостающих элементов
             tt6      // синхронизация
    );
  // Режим [] - обычный режим
  TT_2 = set of TT_1;

Комментарии же есть
Наехал, да? :)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Передача set of enum в качестве параметра функции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]