Pascal - это язык, скомпилированный одним проходом, поэтому компилятор сканирует только один раз один файл: в каждый момент он должен знать каждый идентификатор.Когда вы создаете циклическую ссылку, как в этом случае, вы ссылаетесь на класс, написанный после текущего, который не разрешен.Чтобы решить эту проблему, вам нужно использовать так называемое предварительное объявление , то есть вы объявляете (обещаете) компилятору, что где-то в вашем коде он найдет этот идентификатор (посмотрите на код, problem1 ).
Кроме того, вы определяете несколько областей разных типов (записывая type несколько раз).Каждая область типов имеет свои собственные типы (и тип, определенный в области, не может быть виден другой областью действия), следовательно, вам нужно определить одну (посмотрите на код, problem2 ).
program Test;
interface
type // declare a single type scope (problem 2)
MyParentClass = class; // this is the forward declaration (problem 1)
MyChildClass = class
public
parent: ^MyParentClass;
end;
MyParentClass = class
public
childs: array of ^MyChildClass;
end;
implementation
end.