Я сталкиваюсь с тем, что кажется очень классической проблемой: элемент и класс коллекции, как ссылки друг на друга, требующие прямого объявления. Я использую 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, с приведенной выше ссылкой.