Я столкнулся с очень классической проблемой: элемент и класс коллекции, которые ссылаются друг на друга, требуют предварительного объявления. Я использую Delphi 2010 с обновлением 5.
Это хорошо работает с не универсальными классами, но я не могу обойти ошибку E2086 с универсальными типами:
type
// Forward declarations
TMyElement = class; // E2086: Type 'TMyElement' is not yet completely defined
TMyCollection<T:TMyElement> = class
//
end;
TMyElement = class
FParent: TMyCollection<TMyElement>;
end;
Та же проблема возникает при переключении порядка объявления классов.
Я не нашел упоминания об этой проблеме здесь или в QualityCentral (были обнаружены другие проблемы с E2086, но не связанные с этим вариантом использования)
Единственный обходной путь, который у меня есть на данный момент, - объявить родительский объект как TObject и при необходимости привести его к общему типу коллекции (не чистое решение ...)
Как вы обошли эту проблему или объявили свои универсальные классы вперед?
Спасибо,
[Изменить 22 октября 2011 г.] Последующие действия в QualityCentral: Я сообщил об этой ошибке в центре качества здесь
Это было недавно закрыто EMB со следующим статусом разрешения: Разрешение: как задумано. Решено в сборке: 16.0.4152.
У меня только Delphi 2010. Может ли кто-нибудь подтвердить, что он был исправлен в Delphe XE2 Update1, или это означает, что он работает «как ожидалось»?
[Редактировать 23 октября 2011 г.] Окончательный ответ от EMB: EMB подтвердил сегодня, что использование прямого объявления универсального типа не поддерживается фактическим компилятором Delphi. Вы можете увидеть их ответ в QC по ссылке, указанной выше.