[ shaDy @ 18.11.2004. 23:22 ] @
| POzdrav
Kao sto sam naslov kaze imam problem sa Circular Unit referencom...
evo o cemu se radi...
Imam 3 Klase: A, B, i C
Imam 2 Unita: Unit1 i Unit2
E sada,
Klasa A ima u sebi promenjivu koja je tipa Klase C.
Klasi B ima isto promenjivu tipa Klase C
Klasa C ima 2 promenjive Tipa klasa A i B
klase A i C su u Unit1 a B je u unit 2.
Problem je kako resiti problem Circular Unit referenca..
Ako ih stavim sve u jedan unit opet imam problem jer mi Forward Decleration klase tu nikako ne pomaze jer imam 3 ispovezivane klase...
Ima li neko neku ideju?
pozdrav svima
|
[ bancika @ 19.11.2004. 00:40 ] @
sama po sebi je struktura cirkularna, mislim da ne moze to tako da funkcionise. jel mora da bude tako komplikovano?? nigde ne mozes da definises pojam preko njega samog
[ filjo @ 19.11.2004. 03:51 ] @
Iz klase C izbaci sve promenjljive iz klasa A i B, i napravi C1 koja nasljedjuje C, a u njoj dodaj promenjljive iz klasa A,B tacno one koje si izbacio iz C.
[ shaDy @ 19.11.2004. 09:53 ] @
Da, tako bi trebalo da funkcionise, ali pod uslovom da opet nabacam sve u jedan UNIT...
hmmm ima li neka mogucnost da mi ostane sve to u 2 unita, posto ima dosta koda pa je preglednije i lakse za rad.
POzdrav
[ Rapaic Rajko @ 19.11.2004. 10:38 ] @
'Ako ih stavim sve u jedan unit opet imam problem jer mi Forward Decleration klase tu nikako ne pomaze jer imam 3 ispovezivane klase...'
Forward declaration JOS KAKO pomaze; u jednom unit-u mozes da uradis sve.
Rajko
[ shaDy @ 19.11.2004. 10:47 ] @
evo u cemu je problem sa Forward decleration...
pisem na primer ovako:
Code:
type klasaC = class; // Forward decl.
type klassaA = class
...
end;
// ovde bi trebalo da ide Forward Decl. klase B, ali to nije dozvoljeno...
Type KlasaC = class //klasa C
...
end;
Konkretno u mom primeru imam 2 threada. Thread1 i Thread 2
I imam jednu klasu.
Threadovi imaju u sebi promenjivu:
Owner : TKlasa;
a Klasa ima u sebi 2 promenjive:
Thread1 : TThread1;
Thread2 : TThread2;
[ Milos D @ 19.11.2004. 11:26 ] @
Stavi forward declaration za SVE tri klase odmah na pocetak
type
klasaA = class;
klasaB = class;
klasaC = class;
pa tek onda nastavi sa punom deklaracijom
[ shaDy @ 19.11.2004. 11:31 ] @
Problem je u tome sto to ne moze tako..
Nego mora da se uradi
Forward...
pa neka klasssa
pa odma ispod klasa ciji je forward bio gore... Inace kompajler daje gresku..
[ Rapaic Rajko @ 19.11.2004. 12:17 ] @
Uh, koji kompajler? U Delphi-ju moze glatko forward kako hoces...
Rajko
[ shaDy @ 19.11.2004. 16:11 ] @
Delphi 7
Prijavljuje sledecu gresku ukoliko ne postujem onaj redosled iz prosle poruke:
"Type ImeKlase is not yet defined."
[ shaDy @ 19.11.2004. 19:47 ] @
Delphi 7...
Greska koju izbacuje je:
"Type KlasaA is not yet completely defined"
pozdrav
[ Almedin @ 19.11.2004. 19:57 ] @
evo kako može (provjereno na d7):
unit Unit2;
interface
type
klasa1 = class;
klasa2 = class;
klasa3 = class;
klasa1 = class
Proba: integer;
p1: klasa2;
p2: klasa3;
end;
klasa2 = class
Proba: integer;
p1: klasa1;
p2: klasa3;
end;
klasa3 = class
Proba: integer;
p1: klasa1;
p2: klasa2;
end;
[ filjo @ 19.11.2004. 20:01 ] @
Daj definicije klasa u oba Unita pa ces sve srediti sa 1 postom.
[ shaDy @ 19.11.2004. 22:09 ] @
Kako mislis sve cu srediti sa jednim postom?
Sto se tice Forward declarationa.
U pravu ste, radi sve. Usled silnog sastavljanja klasa u jedan UNIT potkralo mi se jedno Type vise, pa je zbog toga izbacivo gressku...
pozdrav
[ filjo @ 19.11.2004. 22:36 ] @
Pa mislio sam tako, sto svi zelimo da ti pomognemo, a samo nagadjamo o strukturi tvojih klasa. Da si okacio kod, neko bi odmah ispravio greske. Eto samo toliko.
Pozdrav
[ shaDy @ 19.11.2004. 23:58 ] @
Ok. kapiram ;)
Hvala puno svima na pomoci.
Sto se tice forward declarationa, ja sam bio ubedjen da sam nedge procito da
mora biti ispostovan redosled o kome sam piso. Al eto ispostavilo se da sam
pogresno mislio a pored toga imo i gresku u kodu...
Jedino nemogu jos da razumem da ne postoji nacin da se ostave klase u
zasebnim unitima a da se nekako izbegne Circular reference...
Al dobro sta je tu je.. Stavio sam sve u jedan Unit, i sad radi...
pozdrav svima
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|