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