Объявить самоссылочное поле

Модераторы: Duncon, Naeel Maqsudov, Хыиуду, Игорь Акопян

Ответить
Фоб
Сообщения: 45
Зарегистрирован: 10 ноя 2006, 14:56

02 авг 2007, 18:40

Забыл, как объявить то, что не выходит объявить так:

Tc = record
a: integer;
m: array of Tc;
end;
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

03 авг 2007, 08:15

[syntax="delphi"]type
PC = ^TC;
TC = record
a: integer;
m: array of PC;
end;[/syntax]
С уважением, Lost Angel...
Фоб
Сообщения: 45
Зарегистрирован: 10 ноя 2006, 14:56

03 авг 2007, 14:47

Спасибо, это то, что нужно!
Фоб
Сообщения: 45
Зарегистрирован: 10 ноя 2006, 14:56

07 авг 2007, 19:37

Продолжение вопроса.

Объявил вот это:

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

  type  PC = ^TC;
  TC = record
  a: integer;
  m: array of PC;
end;
Кроме того, есть рекурсивная функция

countThis(aTc: Tc): real;

Она вызывает себя, передавая в качестве аргумента элементы массива m.

Однако, при компиляции возникает ошибка: Incompartible types: 'Tc' and 'Pc'

Как бы заставить функцию принимать оба типа аргументов? Ведь в сущности, они одно и то же.

Пока есть идея (громоздкая) создать дополнительную функцию, чтоб переводила Pc в Tc, но наверняка есть более простой способ. Может, кто-то знает?
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

08 авг 2007, 08:12

это не одно и то же.
PC - это ссылка на TC ;)

приведение:

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

var
  a: TC;
  b: PC;
begin
  a := b^;
  b := @a;
end;
впринципе... пожно объявить перезагруженные функции для эмуляции:

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

function countThis(aTc: TC): real; overload;
begin
  ... текст функции
end;
function countThis(aTc: PC): readl overload;
begin
  result := countThis(aTc^);
end;
;)
С уважением, Lost Angel...
Фоб
Сообщения: 45
Зарегистрирован: 10 ноя 2006, 14:56

08 авг 2007, 12:52

Ура! Вы меня снова выручили! :)
Ответить