Ver Mensaje Individual
  #2  
Antiguo 25-01-2007
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Reputación: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Las referencias circulares se deben a que el compilador entra en un bucle infinito al interpretar la cláusula USES. Simplificadamente:
Código Delphi [-]
UNIT Unidad1;

INTERFACE

USES
  Unidad2;

IMPLEMENTATION

END.




UNIT Unidad2;

INTERFACE

USES
  Unidad1;

IMPLEMENTATION

END;

Cuando compilamos la Unidad1, el compilador entra en "INTERFACE" y encuentra "USES Unidad2", así que carga dicha unidad para compilar la sección INTERFACE de la misma. Ahí encuentra "USES Unidad1", así que la carga para compilar la sección INTERFACE, que contiene "USES Unidad2", así que la carga para compilar la sección INTERFACE, que contiene "USES Unidad1", así que la carga para... Creo que se me entiende.

La única forma de evitar esto es moviendo la cláusula USES a la sección IMPLEMENTATION, de forma que no sea accesible desde otros módulos.
Código Delphi [-]
UNIT Unidad1;

INTERFACE

IMPLEMENTATION

USES
  Unidad2;

END.




UNIT Unidad2;

INTERFACE

USES
  Unidad1;

IMPLEMENTATION

END;
Aquí el compilador entra en "INTERFACE", la compila, luego entra en "IMPLEMENTATION" y encuentra "USES Unidad2" carga dicha unidad para compilar la sección INTERFACE de la misma. Ahí encuentra "USES Unidad1", así que la carga para compilar la sección INTERFACE. Cuando llega a la sección IMPLEMENTATION regresa a la Unidad2 y cuando termina de compilar la sección INTERFACE de esta continúa compilando la Unidad1.

Espero haberme explicado bien.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita