Страница 1 из 1

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

СообщениеДобавлено: 19.02.2015 09:47:00
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;


Так работает.

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

СообщениеДобавлено: 19.02.2015 13:25:15
svk12
Может быть, так:
Код: Выделить всё
type
  TList = Object;forward;

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

СообщениеДобавлено: 19.02.2015 13:37:39
Дож
Нет, так не получится. Нарушить порядок объявления типов можно только для типизированных указателей, class'ов и, вероятно, interface'ов.