Stelma Napisano Maj 12, 2011 Zgłoś Share Napisano Maj 12, 2011 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 Link do komentarza Udostępnij na innych stronach More sharing options...
olesio Napisano Maj 12, 2011 Zgłoś Share Napisano Maj 12, 2011 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 More sharing options...
Stelma Napisano Maj 12, 2011 Autor Zgłoś Share Napisano Maj 12, 2011 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 More sharing options...
Integer Napisano Maj 12, 2011 Zgłoś Share Napisano Maj 12, 2011 Delphi 2007 takie coś łyka to może i Twoje przyjmie: PElement = ^TElement; TElement = record element : array of PElement; end; Link do komentarza Udostępnij na innych stronach More sharing options...
Stelma Napisano Maj 12, 2011 Autor Zgłoś Share Napisano Maj 12, 2011 @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 More sharing options...
Blind Napisano Maj 12, 2011 Zgłoś Share Napisano Maj 12, 2011 setLength( El.element[0].element, 10 ); Oczywiście że wywali AV bo El.element[0] = nil, albo jakas losowa wartosc. Utworzyłeś tylko tablice wskaźników, ale ich nie zainjalizowałeś www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
DevPort Napisano Maj 12, 2011 Zgłoś Share Napisano Maj 12, 2011 Ahh Blind mnie wyprzedził ... 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 More sharing options...
Stelma Napisano Maj 12, 2011 Autor Zgłoś Share Napisano Maj 12, 2011 Hi hi dziękuje wszystkim za pomoc, śmiga jak należy Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.