Очередной DCC Internal error
Опубликовано 22.06.2011 г. 16:23
А вы часто получаете внутренние ошибки компилятора?
Обычно подобные ошибки вызваны тем, что вы действительно что-то написали некорректно, и немного повозившись можно найти в чем же причина, и исправить ее. Вчера коллега при разработке дочернего класса столкнулся с ошибкой, которую решить так и не удалось. Тест достаточно простой:
- Создаем новый проект, например, консольный
- Добавляем в проект два новых модуля
- Секцию интерфейса первого юнита расширяем следующими типами данных:
uses generics.collections; type TItemCollection = TObjectList<TObject>; TBaseItem = class(TObject) items : TItemCollection; end;
Т.е некоторая коллекция, и базовый класс с указателем на экземпляр такой коллекции. - Во секцию uses второго модуля подключаем первый.
- В интерфейсной части второго модуля описываем дочерний класс:
type TItem<T> = class(TBaseItem) procedure test(); end;
- В реализации метода Test() мы создаем экземпляр коллекции:
procedure TItem<T>.Test(); begin items := TItemCollection.Create(); end;
[DCC Fatal Error] Unit2.pas(23): F2084 Internal Error: URW1111Каковы причины возникновения ошибки видимо понятны только самим разработчикам Delphi, но что-то подсказывает что связано это с использованием обобщений. Можно провести несколько манипуляций и ошибка исчезает. Например:
- Поместить описания этих двух классов в один модуль - все компилируется
- Если используется не generic список, а просто объект, то все работает (TItemsCollection = TObject)
- Если член класса items поместить в дочерний класс, ну или вообще убрать, то снова все хорошо.
23.06.2011 в 10:05
28.06.2011 в 10:08
04.03.2012 в 09:07
04.03.2012 в 12:22
01.12.2012 в 23:16
готово :)
27.11.2013 в 20:43
Причём не на дженериках. А просто добавил метод-функцию в класс, причем в секции реализации не указал тип возвращаемого значения (т.е. описал как процедуру).
При компиляции получил сабж в совсем другом модуле, косвенно ссылавшимся на модифицированный.
Сделал Build - и показалась обычная ошибка о не соответствии декларации функции.
29.08.2017 в 11:12
every day along with a cup of coffee.
20.10.2017 в 09:47
the visitors to go to see the web site, that's what
this web page is providing.