Как объявить типы классов с перекрестными ссылками?


Я попытался построить систему классов в Delphi. Классы TFieldSpec и TTableSpec ссылаются друг на друга через свойства объекта.

type
  TFieldSpec=class(Tobject)
  private
    FTableSpec : TTableSpec;
  public
    property TableSpec : TTableSpec read FTableSpec;
  end;

  TTableSpec=class(Tobject)
  private
    FFields : array[1..100] of TFieldSpec;
  end;

Когда я компилирую это, я получаю эту ошибку:

[Error] Objects.pas(66): Undeclared identifier: 'TTableSpec'

Как построить эти типы классов?

1 2

1 ответ:

Вы должны использовать прямое объявление TTableSpec:

type
  TTableSpec = class;

  TFieldSpec=class(Tobject)
  private
    ..
    FTableSpec : TTableSpec;
    ..
  end;

  TTableSpec=class(Tobject)
  private
    FName : string;
    ..
  end;