Odwołanie do samego siebie w typie

0

Witam.
Mam taki problem, że piszę program bazę elementów elektronicznych.
Elementy te są pogrupowane według kategori, struktura kategorii to struktura folderów, tzn.
jest główna kategoria i podkategorie.
Każda kategoria może mieć w sobie elementy i podkategorie
Wymyśliłem coś takiego:

type
TElement=record //typ opisujący element
IsCategory:boolean; //Czy to jest Kategoria? Pozwala na odróżnienie czy wskaźnik Data
Category:pointer; //Wskaźnik do kategori, do której należy ten element,.
Index:integer; //Numer w kategori
Parent:pointer;
Name:String; //nazwa
Num:integer; //Ilosc
From:String; //Pochodzenie elementu
Used:boolean; //Czy element był używany
Descr:string; //Opis elemetu
Pict:string; //nazwa pliku ze zdjęciem
end;
type
TCategory = ^x; //sztuczka, żeby w TCategory można było się odwołać do TCategory
x=record///Rekord opisujący kategorie
IsCategory:boolean; {Czy to jest Kategoria? Pozwala na odróżnienie czy wskaźnik Data
aktualnie zaznaczonego elementu w TView wskazuje na element czy kategorię.Taki sama zmienna jest w TCategory}
Category:array of TCategory; //Wskaźnik do kategori, do której należy ten element,
Name:String; //Nazwa kategori
Elements:array of TElement; //Elementy w kategori, pierwszy ma numer 0
SubCategories:array of TCategory; //Odwołanie do TCategory, pierwsza ma numer 0
ElementsN:integer; //Ilość elementów,pierwszy ma numer 0
SubCategoriesN:integer; //Ilość podkategori
Index:integer; //Numer w kategori.

end;

Problem jest tutaj:
TCategory = ^x; //sztuczka, żeby w TCategory można było się odwołać do TCategory
Category:array of TCategory; //Wskaźnik do kategori, do której należy ten element,

Czy dało by się to rozwiązać w jakiś inny sposób, bo pomimo stosowania New, dzieją się różne rzeczy, jak w głównej kategorii, podczas tworzenia formy wpiszę: MainCategory.ElementsN:=-1,
to przy próbie następnego odwołania wychodzi np ElementsN=776576576.
Czy takie coś można by było lepiej wykonać w C++ i czy w ogóle C++ waszym zdaniem lepiej się do wszystkiego nadaje niż Delphi ?

0

x=record///Rekord opisujący kategorie

co to za pomysł nazywać typ x?

robi się zwykle tak:

type PCategory = ^TCategory;
     TCategory = record
       ...
    end;

i nie ma w tym żadnej „sztuczki”, bo jasno po nazwie widać, co jest rekordem, a co wskaźnikiem nań.

Czy dało by się to rozwiązać w jakiś inny sposób, bo pomimo stosowania New, dzieją się różne rzeczy, jak
Nie mam pojęcia o co tu w zasadzie pytasz. Jeśli coś ci nie działa jak powinno, to pokaż kod.

Czy takie coś można by było lepiej wykonać w C++
Proponuję skupić się nad problemem, a nie na skakaniu między językami, bo w C++ też czegoś nie potrafisz i będziesz się nad następnym językiem zastanawiał.

i czy w ogóle C++ waszym zdaniem lepiej się do wszystkiego nadaje niż Delphi ?
Obecne trendy są raczej anty-C++. Na pewno nie jest to język łatwiejszy od Delphi.

0

W ogóle to takie coś powinieneś robić na jakimś silniku bazodanowym.

1 użytkowników online, w tym zalogowanych: 0, gości: 1