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

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Объявить самоссылочное поле

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

Фоб » 08 авг 2007, 12:52

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

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

LAngel » 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;
;)

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

Фоб » 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, но наверняка есть более простой способ. Может, кто-то знает?

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

Фоб » 03 авг 2007, 14:47

Спасибо, это то, что нужно!

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

LAngel » 03 авг 2007, 08:15

[syntax="delphi"]type
PC = ^TC;
TC = record
a: integer;
m: array of PC;
end;[/syntax]

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

Фоб » 02 авг 2007, 18:40

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

Tc = record
a: integer;
m: array of Tc;
end;

Вернуться к началу