FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Error: Circular unit reference to 'Unit2'
Hola, al compilar la aplicación me sale el error Circular unit reference to 'Unit2'. Para haceros una idea os hago un resumen, mi aplicación tiene una serie de unidades. algunas son las siguientes:
Al compilar me da el error de unidad circular al referencia Unida2. Mi problema está en que tengo que declarar las clases en las unidades tal como están ahora, y no puedo referencia las unidades en el "uses" de la parte de "implementation" ya que si no me daría error en la declaración de las clases. Si a alguien se le ocurre alguna solución se lo agradecería. Gracias de antemano Última edición por marcoszorrilla fecha: 25-01-2007 a las 15:44:20. |
#2
|
||||
|
||||
Las referencias circulares se deben a que el compilador entra en un bucle infinito al interpretar la cláusula USES. Simplificadamente:
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. 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. |
#3
|
||||
|
||||
Hola, para evitar este tipo de errores es recomendable declarar los uses que tienen que ver con las unidades de tu aplicación justo debajo de la sesión implementación, es decir, debes mover las referencias a unit2 y unit3 que actualmente están en el uses que está debajo de la sesión interface para un nuevo uses que vas a declarar tú mismo debajo de la sesión implementación.
Espero que me hallas entendido y que esta solución resuelva tu problema. Saludos Yuserqui
__________________
Lo importante no es llegar primero, sino saber llegar. Para que puedas llegar mejor lee la Guia de Estilo |
#4
|
|||
|
|||
Hola, os habéis explicado bien y os entiendo. Pero si hago eso se me presenta otro problema, en las unidades unit2 y unit3 hay clases que las declaro en la parte "interface" y que tienen atributos de un tipo declarados en las otras unidades, por lo que tengo que hacer referencia a esas unidades en el "uses" de la parte "interface" y no en "implementation".
No se si me he explicado bien o no. En el código del primer mensaje he puesto de manera resumida cómo están declaradas las clases. Gracias. |
#5
|
||||
|
||||
Entonces deberías planificarlo de otra forma. Tal vez usando interfaces o moviendo alguna clase a otra unidad nueva. Sin el código concreto es difícil darte una solución para esto.
|
#6
|
|||
|
|||
Hola Ñuño, he intentado mover clases a otras unidades pero ha sido imposible, las declaraciones de las clases que tengo me lo impedían.
Al final lo he resuelto de otra forma. Las variables de la clase de la unidad Unit2 las he declarado del tipo de una clase padre común con el tipo de las clases a las que me interesaba referenciar. Despúes he referenciado las otras unidades en el "uses" del "implementation" para poder hacer "TClase(Variable)" -creo que se dice "cast"- en el desarrollo de los métodos. No se si me he explicado. Gracias por todo. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
mensaje de error UNIT.OBJ | noe | C++ Builder | 7 | 19-07-2006 00:57:22 |
referencia circular | melon | OOP | 1 | 16-04-2006 02:13:00 |
Problema unit2.dcu not found | serhasae | Varios | 2 | 26-06-2005 13:23:03 |
object reference not set to | arantzal | Varios | 3 | 27-01-2005 12:05:55 |
Essential XML Quick Reference | jachguate | Noticias | 2 | 18-08-2004 18:59:19 |
|