2010-01-26 16 views
7

He sido completamente incapaz de adelantar declaraciones de clase en Delphi 2010. He leído los documentos, leído en la web, y tal vez soy un idiota, pero Simplemente no puedo obtener nada para compilar. ¡Cualquier ayuda sería apreciada masivamente!No se puede obtener una declaración de clase hacia adelante para trabajar en Delphi 2010

He derribado estas dos clases de mickey mouse. Seguro que sé que necesitan constructores, etc. para que realmente funcionen, es solo una demostración del problema que estoy teniendo.

Tengo clase MyParent que contiene un TList de mi otra clase MyChild. Esta bien. Pero luego, dentro de MyChild, quiero poder establecer una referencia a su objeto principal, no el TList, sino mi clase MyParent.

unit ForwardClassDeclarationTest; 

interface 

uses generics.collections;   

type 
    MyChild = Class 
    private 
    ParentObect:MyParent; <--I need to be able to make this accessable 
    public 
End; 

type 
    MyParent = Class 
    public 
    tlChildren:TList<MyChild>; 
End; 

implementation 

end. 

Necesito crear una declaración hacia adelante antes de que éstos tanto clase, pero soy totalmente incapaz de conseguir cualquier cosa va. Gracias de antemano a cualquier persona inclinada a ayudarme.

Respuesta

13

@csharpdefector tratar este código

uses 
    Generics.Collections; 

type 
    MyParent = Class; // This is a forward class definition 

    MyChild = Class 
    private 
    ParentObect:MyParent; 
    public 
    End; 

    MyParent = Class // The MyParent class is now defined 
    public 
    tlChildren:TList<MyChild>; 
    end; 

implementation 

end. 

para obtener más información se puede ver este link en delphibasics

+1

Sí, gracias hombre! Estaba fallando en poner ambas clases bajo el mismo tipo de letra ty mucho. – csharpdefector

+1

@Jim: _deben_ estar bajo la misma palabra clave _type_, o de lo contrario se encontrará con el error del compilador "no completamente definido". Ver la respuesta de los masones. –

+0

@Paul Sí, tienes razón. Me retractaré de mi comentario. –

13

antes de declarar Mi hijo, puso: MyParent = class; y luego declarar Mi hijo. Luego declara MyParent correctamente. Y no reutilice la palabra clave tipo. Denota un bloque de declaración de tipo, no una declaración de tipo individual, y la declaración de reenvío de clase solo funciona dentro del mismo bloque.

+0

Gracias masón, lo tengo. No estaba logrando poner mis dos clases en el mismo bloque que mencionas. – csharpdefector

Cuestiones relacionadas