2010-01-26 8 views
7

Sono stato completamente in grado di ottenere in avanti dichiarazioni di classe a Delphi 2010. Ho letto la documentazione, documentarsi sul web, e forse io sono un idiota, ma Non riesco a ottenere nulla da compilare. Qualsiasi aiuto sarebbe enormemente apprezzato!non può ottenere una dichiarazione di classe l'ora di lavorare in Delphi 2010

Ho messo incinta queste due classi Topolino. Certo, so che hanno bisogno di costruttori etc per funzionare davvero, è solo una demo per il problema che sto avendo.

devo mioGenitore classe che contiene una TList del mio altro MyChild classe. Va bene. Ma poi all'interno di MyChild voglio essere in grado di impostare un riferimento al suo oggetto padre, non al TList ma alla mia classe 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. 

Ho bisogno di creare una dichiarazione anticipata prima di entrambe queste classi, ma sono completamente incapace di far funzionare tutto. Grazie in anticipo a chiunque sia disposto ad aiutarmi.

risposta

13

@csharpdefector provare questo codice

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. 

per ulteriori informazioni si può vedere questo link in delphibasics

+1

Sì, grazie uomo! Non stavo riuscendo a mettere entrambe le classi sotto lo stesso tipo di dichiarazione ty molto. – csharpdefector

+1

@Jim: Hanno _do_ devono essere sotto la stessa parola chiave _type_, altrimenti si corrono al errore del compilatore "non del tutto definito". Vedi la risposta dei massoni. –

+0

@Paul Sì, sei corretto. Ritornerò il mio commento. –

13

Prima si dichiara MyChild, messo: MyParent = class; e quindi dichiarare MyChild. Quindi dichiara MyParent correttamente. E non riutilizzare il tipo parola chiave. Denota un blocco di dichiarazione di tipo, non una dichiarazione di tipo individuale, e la dichiarazione di inoltro di classe funziona solo all'interno dello stesso blocco.

+0

Grazie Mason, ho capito. Non stavo mettendo entrambe le mie classi nello stesso tipo di blocco di cui hai parlato. – csharpdefector

Problemi correlati