Newsgroup: it.comp.lang.delphi
Titolo: problemi nella creazione di una struttura recorsiva

Ciao a tutti ho questo problema.
Ho creato una classe, chiamiamola XC, che ha tra i suoi
membri un oggetto TStringList SL, nel quale vado a porre
istanze XC associate a nomi-stringa; l'idea e' di costruire
una struttura ad albero. SL e' istanziata all'inizio del
costruttore.
Dentro il costruttore avro' necessita' di invocare
recorsivamente il costruttore stesso tante volte quanti i figli,
per poter popolare la lista SL.
E qui viene il bello.
Quando sono nel costruttore dell'istanza-figlio, l'oggetto SL
e' lo stesso!! Cioe' anziche' il figlio avere una propria lista SL,
esso riferisce con lo stesso nome la lista del padre!!
Ho posto un watch su @SL ed il suo valore, passando dal
costruttore del padre a quello del figlio, non cambia!!
Dove sbaglio?
Ciao e grazie a tutti!

pgia...@yahoo.it
 ha scritto:




E' possibile vedere un po' di codice?
Ciao
ACSH
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

> E' possibile vedere un po' di codice?
questo e' il codice del costruttore.
TFilesHolder e' la classe.
"subdirs" e' la StringList che crea l'inghippo.
L'invocazione recorsiva del costruttore e' alla
quartultima riga. Di ritorno da quella, l'oggetto
subdirs del FilesHolder chiamante e' cambiato.
Questo e' l'effetto che non voglio.
Ciao grazie!
-----------------------------------------------------------------------
constructor TFilesHolder.Create(description: TStringList; depth:
integer);
var
  childescr     : TStringList;
  ch            : TFilesHolder;
  fts           : TFileSpecificTimes;
  fsr           : TSearchRec;
  lftm          : _FILETIME;
  stc, sta, stw : _SYSTEMTIME;
  res, i, j     : integer;
  xs            : string;
  boo           : boolean;
begin
  files := TStringList.Create;
  subdirs := TStringList.Create;
  fDescription := description;
  fDepth := depth;
  // ricerca file
  res := FindFirst(fDescription[0] + '*.*', faAnyFile, fsr);
  while res = 0
    do begin
         FileTimeToLocalFileTime(fsr.FindData.ftCreationTime, lftm);
         FileTimeToSystemTime(lftm, stc);
         FileTimeToLocalFileTime(fsr.FindData.ftLastAccessTime, lftm);
         FileTimeToSystemTime(lftm, sta);
         FileTimeToLocalFileTime(fsr.FindData.ftLastWriteTime, lftm);
         FileTimeToSystemTime(lftm, stw);
         if fsr.Attr and faDirectory = faDirectory
           then begin
                  if ((fsr.Name <> '.') and (fsr.Name <> '..'))
                    then begin
                           fts := TFileSpecificTimes.Create(stc, sta,
stw);
                           subdirs.AddObject(fsr.Name, fts);
                         end
                end
           else begin
                  boo := fDescription.count = 1; i := 1;
                  while ((not boo) and (i < fDescription.Count))
                    do begin
                         boo := match(fDescription[i], 
fsr.name
, true)
= 1;
                         inc(i);
                       end;
                  if boo
                    then begin
                           fts := TFileSpecificTimes.Create(stc, sta,
stw);
                           files.AddObject(fsr.Name, fts);
                         end;
                end;
         res := FindNext(fsr);
       end;
  // soddisfacimento depth
  if depth = 0
    then begin
           if fDescription.Count > 1
             then begin
                    subdirs.Clear;
                  end;
         end
    else for i := 0 to subdirs.Count - 1
           do begin
                xs := subdirs[i];
                subdirs.Delete(i);
                childescr := TStringList.Create;
                childescr.Add(fDescription[0] + xs + '\');
                for j := 1 to fDescription.Count - 1
                  do childescr.Add(fDescription[j]);
                ch := create(childescr, depth - 1);
                ch.parent := self;
                subdirs.AddObject(xs, ch);
              end;
end;