Los registros son tipos de valores, no tipos de referencia. Esto significa que todos los registros utilizados como miembros de una estructura de datos más grande se colocan en línea en la propia estructura en lugar de como un puntero. Intentar crear dos registros que se contengan arrojaría al compilador en un bucle infinito mientras trata de descubrir la estructura de los registros. Esa es probablemente la razón por la que no puede reenviar-declarar un registro, y aunque está tratando de insertar un tipo de referencia (matriz dinámica) aquí, todavía no puede violar las reglas de idioma.
Pero lo que puede hacer es declarar un tipo puntero a registro como una declaración hacia delante, así:
PMyRec2 = ^MyRec2
...
MyRec2 = record
...
end;
Por supuesto, una vez que empiece a usar punteros a los registros, usted tiene que preocuparse acerca de la asignación y liberar la memoria, y la complejidad del código que intentaba evitar al no usar clases aparece en su proyecto. En pocas palabras: haz esto con las clases. Haga uno de los registros, si no ambos, una clase. Es la forma más simple, realmente.
Y la sobrecarga de memoria adicional es insignificante. Se obtiene un puntero al objeto para cada referencia, que se necesitaría para punteros a objetos de todos modos, más un campo oculto (4 bytes) por instancia antes de D2009 o dos de ellos (8 bytes) en D2009 o posterior. Eso no es mucho en absoluto.
duplicado posible: http://stackoverflow.com/questions/2420650/cross-reference-between-delphi-records –
Esto no tiene sentido. Si suponemos que la longitud de cada MyRec2Array es fija y distinta de cero, entonces está intentando crear una estructura de datos que ocupará infinitamente muchos bytes ... –
@Andreas Rejbrand - MyRec2Array es * dynamic * array. – Alex