Skocz do zawartości

[DELPHI] Zagnieżdzony typ danych(?)


Stelma

Polecane posty

Witam

 

Delphi mam w wersji '7 Enterprise'

 

Potrzebuje pomocy w deklaracji typu danych (nigdy nie myślałem iż w tak prostej rzeczy będzie mi potrzebna pomoc). Najpierw może wytłumaczę w czym problem.

 

Potrzebuje zadeklarować typ danych który posiada w sobie taki sam typ jakim on jest.

 

type
TElement = record
  element : array of TElement;
end;

type
TElement = record
 element : array of ^TElement;
end;

 

 

 

Kończą się takim samym błędem jak normalna deklaracja czyli ::

 

 

 

[Error] Unit2.pas(22): Type 'TElement' is not yet completely defined

 

 

Jeżeli ktokolwiek ma pomysł jak to zrobić na rekordach byłbym wdzięcny smile.gif

Link do komentarza
Udostępnij na innych stronach

Mogę się mylić, to porszę żeby mnie ktoś poprawił, ale chyba się jednak tak nie da zrobić, w sposób jaki Ty chcesz, nawet w klasie mi to nie wychodzi. Jedyne co można zrobić to chyba takie coś, ale nie wiem czy to Ci pasuje.

type
 ElementRec = record
 end;
 TElement = array of ElementRec;

Pozdrawiam: olesio

Link do komentarza
Udostępnij na innych stronach

W klasie się bankowo da zrobić bo mam tak jak poniżej i działa :) minus jest ze musze create robic ;/

 TDOM = class
   element : array of TDOM; //Zmienna która przechowuje elementy 'niżej' taki rodzic
   code : String;           //Nazwa elementu np 'body', 'html', 'div', 'a', 'b'

Link do komentarza
Udostępnij na innych stronach

@Integer

Kompilator łyknąć łyknoł. Jednak przy ustalaniu długości tablicy wali błędem pamięci.

 

type
 PElement = ^TElement;

 TElement = record
   element : array of PElement;
   code : String;
 end;

Var
El : TElement;


begin
setLength( El.element, 10 );
setLength( El.element[0].element, 10 );  //Error Access Violation etc...

El.code := 'aaa';
El.element[0].code := 'aaa';  //Error Access Violation, choć nadałem długość 1 przypisaniem


Form1.Caption := El.element[0].code;  // Z racji iż nie istnieje to błąd pamięci
end.

Link do komentarza
Udostępnij na innych stronach

Ahh Blind mnie wyprzedził :P...

Dokładnie tak jak on pisze, to tablica wskaźników... aby działała możesz zrobić tak jak tu podaję... :]

To Tylko PRZYKŁAD:

program test;

type
       PElement = ^TElement;
       TElement = record
               element : array of PElement;
               code : string;
       end;

var
       El, Ele : TElement;

begin
       setLength( El.element, 10 );
       El.element[0] := @Ele; // Zapis adresu zmiennej 'Ele' do tablicy wskaźników
       // Podstawy o wskaźnikach nauczają, że w celu zmiany wartości zmiennej, 
       // która jest wskazywana przez wskaźnik dajemy ^ za nazwą wskaźnika.
       // Czyli :
       setLength( El.element[0]^.element, 10 );
       El.code := 'EL'; 
       El.element[0]^.code := 'Ele'; // Operacja na zmiennej 'Ele' za pośrednictwem wskaźnika
       ELe.code := 'Ele.next'; // Operacja na zmiennej 'Ele' bez pośredników ;] 
       Writeln(El.code);
       Writeln(El.element[0]^.code);
end.

 

Wynik programu:

EL

Ele.next

 

Działa pod Ubuntu :], a teraz mykam do pracy na 23:00 ;]

Pozdrawiam.

Prawdziwy programista wiesza sie wraz ze swoim programem.

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...