Cómo resolver el problema de las referencias circulares

5432 vistas

Cuando dos ficheros tienen que referirse mutuamente, no podemos referenciar los dos en la cláusula uses de la interface ya que esto provocarÃa el error de "Referencia circular" en la compilació.
De esta manera, el código siguiente provocará un error de compilación:

Primera unidad



delphi
  1. Unit Unit1;
  2.  
  3. interface
  4. uses Unit2;
  5. ...
  6. end;



Segunda unidad



delphi
  1. unit Unit2;
  2.  
  3. interface
  4. uses Unit1; // no es posible su utilización aquÃ
  5. ...
  6. end;



Para evitar este error podemos seguir una de estas soluciones:

  • Hacer referencia a la otra unidad en la sencción Implementation en lugar de en Interface
  • Poner una en la sección Interface y la otra en la sección Implementation

Ejemplo de uso de la segunda solución

Primera unidad (no la modificamos)



delphi
  1. Unit Unit1;
  2.  
  3. interface
  4. uses Unit2;
  5. ...
  6. end;



Segunda unidad, desplazamos la declaración de la unidad a la sección Implementation



delphi
  1. unit Unit2;
  2.  
  3. interface
  4. ...
  5. implementation
  6. uses Unit1;  // Modificación
  7. ...
  8. end;



Para evitar este tipo de errores, es preferible el uso de la cláusula uses en la sección implementation. Sólo en el caso de que algún identificador de la sección Interface use alguno de la otra unidad será necesario su declaración en la cláusula uses de dicha sección.