Опережающее рбъявление object'а

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Ответить
Jordan
новенький
Сообщения: 15
Зарегистрирован: 19.12.2013 09:44:54

Опережающее рбъявление object'а

Сообщение Jordan »

Приветствую.

Код: Выделить всё

type
  TList = Object;

  PWidget = ^TWidget;
  TWidget = Object
    Next : PWidget;
    Prev : PWidget;
    Child: TList;
  end;

  PList = ^TList;
  TList = Object // Duplicate identifier "TList"
                       //Forward type not resolved "TList"
    Head: PWidget;
    Tail: PWidget;
    procedure Init();
    procedure Append(Elem: PWidget);
    procedure Free();
    procedure Remove(Elem: PWidget);
  end;


Если заменить object на class, опережающее объявление работает. С object'ом нет.

Добавлено спустя 20 минут 49 секунд:
Методом Тыково. Проблему решил.

Код: Выделить всё

type
  PWidget = ^TWidget;
 
  PList = ^TList;
  TList = Object
    Head: PWidget;
    Tail: PWidget;
    procedure Init();
    procedure Append(Elem: PWidget);
    procedure Free();
    procedure Remove(Elem: PWidget);
  end;
 
  TWidget = Object
    Next : PWidget;
    Prev : PWidget;
    Child: TList;
  end;


Так работает.
svk12
постоялец
Сообщения: 411
Зарегистрирован: 09.06.2008 18:42:47

Сообщение svk12 »

Может быть, так:

Код: Выделить всё

type
  TList = Object;forward;
Аватара пользователя
Дож
энтузиаст
Сообщения: 900
Зарегистрирован: 12.10.2008 16:14:47

Сообщение Дож »

Нет, так не получится. Нарушить порядок объявления типов можно только для типизированных указателей, class'ов и, вероятно, interface'ов.
Ответить