Tuesday, January 05, 2010, 11:08:37 PM, Juha Manninen wrote: > On tiistai, 5. tammikuuta 2010 20:06:42 Florian Klaempfl wrote: >> Then do the same as in C++ and put it in different include files.
> Right, include files could solve this problem at least partly. They seem to be Curious enough, nobody even mentioned interfaced objects (interfaces), though they are available in both FPC and Delphi since ages. Not that I would recommend this seriously, however here goes: //--------------------------------------------------- unit ihelper; interface type IMyClass1 = Interface; IMyClass2 = Interface; IMyClass1 = Interface function SomethingUsefull1: byte; end; IMyClass2 = Interface function SomethingMuchMoreUsefull2: longint; end; implementation end. //--------------------------------------------------- unit myunit1; interface uses classes, ihelper; type Tmyclass1 = class(TInterfacedObject, IMyClass1) public Fmyclass2: IMyClass2; FSomethingUsefull1: byte; function SomethingUsefull1: byte; function CrossFunc1: longint; end; implementation function Tmyclass1.SomethingUsefull1: byte; begin result := FSomethingUsefull1; end; function Tmyclass1.CrossFunc1: longint; begin result := Fmyclass2.SomethingMuchMoreUsefull2; end; end. //--------------------------------------------------- unit myunit2; interface uses classes, ihelper; type Tmyclass2 = class(TInterfacedObject, IMyClass2) public Fmyclass1: IMyClass1; FSomethingMuchMoreUsefull2: longint; function SomethingMuchMoreUsefull2: longint; function CrossFunc2: byte; end; implementation function Tmyclass2.SomethingMuchMoreUsefull2: longint; begin result := FSomethingMuchMoreUsefull2; end; function Tmyclass2.CrossFunc2: byte; begin result := Fmyclass1.SomethingUsefull1; end; end. //--------------------------------------------------- program circexamp; uses myunit1, myunit2; var c1: Tmyclass1; c2: Tmyclass2; begin c1 := Tmyclass1.Create; c2 := Tmyclass2.Create; c1.Fmyclass2 := c2; c2.Fmyclass1 := c1; c1.FSomethingUsefull1 := 1; c2.FSomethingMuchMoreUsefull2 := 2; writeln(c1.CrossFunc1); writeln(c2.CrossFunc2); end. //--------------------------------------------------- _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel