property System и abstract-ый Класс

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

property System и abstract-ый Класс

Сообщение Юрий » 03.04.2022 04:06:56

Добрый день всем

Портирую относительно большой проект с Delphi2007
Наткнулся в двух местах на "неприятность" с названием проперти "System"

В коде ниже, всё валидно, но вылетает
Error: Illegal qualifier
либо
Error: identifier idents no member “AbstractError”.
и без указания модуля и строки (что было ужасно и ушло много времени чтоб найти где)

Код: Выделить всё
  TxxxSystem1 = class(TObject)
  private
    fSystem: Int64;
  public
    property Sysxxx: Int64 read fSystem;
    property System: Int64 read fSystem;                // Строка1
  end;

  TxxxSystem2 = class(TxxxSystem1)
  public
    procedure MetodAbstractxxxx; virtual; abstract;     // Строка2
  end;

При удалении либо Строки1 либо Строки2 всё компилируется :(

Переименование свойства влечёт за собой фатальные изменения, т.к находится в базовых классах от которых все зависят, и в текущей ситуации неприемлемо
Если убрать abstract;, и использовать пустышку то компилируется, но становится много мусора в модуле и класс становится не Абстрактным :(

Есть ли какие другие способы обойти это?
Юрий
новенький
 
Сообщения: 11
Зарегистрирован: 03.04.2022 03:32:16

Re: property System и abstract-ый Класс

Сообщение Awkward » 03.04.2022 12:01:20

Кроме как писать
Код: Выделить всё
&system
- перешерстить код
Awkward
новенький
 
Сообщения: 43
Зарегистрирован: 19.01.2017 00:06:47

Re: property System и abstract-ый Класс

Сообщение iskander » 03.04.2022 13:19:59

Похоже на глюк компилятора.
iskander
энтузиаст
 
Сообщения: 590
Зарегистрирован: 08.01.2012 18:43:34

Re: property System и abstract-ый Класс

Сообщение zub » 03.04.2022 13:30:25

Юрий оформи багрепорт
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: property System и abstract-ый Класс

Сообщение DedFrend » 03.04.2022 17:56:49

А зачем вам нужна абстрактность? Обычно это просто дополнительная страховка, чтобы не создавать экземпляры базового класса.
И что означает "много мусора" ?

Добавлено спустя 1 час 41 минуту 42 секунды:
Не поленился сам скомпилировать.
Поразительно, но факт! Конфликт вызывает имя system у свойства и только если у производного класса (можно даже в другом потомке) есть абстрактный метод. Остальное не имеет значения.
DedFrend
постоялец
 
Сообщения: 156
Зарегистрирован: 25.11.2018 12:21:50

Re: property System и abstract-ый Класс

Сообщение Юрий » 04.04.2022 00:46:20

Awkward писал(а):Кроме как писать
Код: Выделить всё
&system
- перешерстить код


&System - не помогает, не компилится

Добавлено спустя 7 минут 24 секунды:
zub писал(а):Юрий оформи багрепорт


Попоробую сделать
Я правильно думаю что это здесь
https://gitlab.com/freepascal.org/
?

Нашел там связаный баг (Как мне кажется...)
https://gitlab.com/freepascal.org/fpc/source/-/issues/32538

Код: Выделить всё
TAbstractClass = class
   function GetLocation (system: TObject): TPoint; virtual; abstract;
end;

Висит там уже 4года, есть подозрение что разработчикам не до этогого... :lol: , поэтому не уверен что багрепорт что либо изменит...

Добавлено спустя 17 минут 55 секунд:
[quote="DedFrend"]А зачем вам нужна абстрактность? Обычно это просто дополнительная страховка, чтобы не создавать экземпляры базового класса.
И что означает "много мусора" ?

>>А зачем вам нужна абстрактность?
Ну как бы вам сказать...
Портирую проект, в проекте использована довольно большая библиотека ~116т.сток кода, написаная в прошлом веке, вот и я сижу и думаю зачем там абстракность....
Я как бы стараюсь не думать над филосовкими вопросами такой категории...,
мне всего лишь нужно портировать с наименьшими правками, потерями времени, функционала, качества, хотелось бы чтоб осталась совместимось с Delphi

>>И что означает "много мусора" ?
Удаляешь abstract; и генеришь пустой виртуальный метод, такак их там очень много , образуется много пустышек-мусора
Юрий
новенький
 
Сообщения: 11
Зарегистрирован: 03.04.2022 03:32:16

Re: property System и abstract-ый Класс

Сообщение DedFrend » 04.04.2022 02:34:29

Удаляешь abstract; и генеришь пустой виртуальный метод, такак их там очень много , образуется много пустышек-мусора

наплевать и забыть. они в потомках сразу будут перекрыты и все будет как было
DedFrend
постоялец
 
Сообщения: 156
Зарегистрирован: 25.11.2018 12:21:50

Re: property System и abstract-ый Класс

Сообщение Сквозняк » 10.04.2022 03:20:41

Использовать в паскале имя равное имени главного модуля, это закладывать под проект мину. Нужно срочно прошерстить проект поисковиком и заменить все System на что-то типа Sys123tem.
Сквозняк
энтузиаст
 
Сообщения: 1109
Зарегистрирован: 29.06.2006 22:08:32

Re: property System и abstract-ый Класс

Сообщение sts » 11.04.2022 11:09:31

Юрий писал(а):Нашел там связаный баг (Как мне кажется...)
https://gitlab.com/freepascal.org/fpc/s ... sues/32538

судя по свежему ответу там все плохо

Добавлено спустя 17 минут 52 секунды:
Сквозняк писал(а):Использовать в паскале имя равное имени главного модуля, это закладывать под проект мину.

это тест на адекватность компилятора, такие косяки в работе пространств имен недопустимы.
ведь это надо еще суметь так криво написать менеджер пространств имен.
sts
постоялец
 
Сообщения: 406
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22

Рейтинг@Mail.ru