Hiya!
Using the latest GPC alpha (9704), I find that I cannot import objects from a unit. I originally had the source for TObject (below) in a unit, and used the unit in this program (test.pas). I had compile errors all the time. Then, I put the object's source into test.pas itself, and it compiled. But when I tried to create a descendant object (NewObj), as seen in the source below, again, I had compile errors - complaining about the "initializer element" for some of the methods not being "constant".
Can anyone tell why this source does not compile, even with the -borland-pascal flag? It compiles and runs okay with BP7 and BPW. Thanks!
{ ---- cut -----} Program Test;
{$define debug}
Type pObject = ^TObject; ChildPtr = pObject;
TObject = Object Parent : pObject; Child : ChildPtr; Name : String[255]; Handle : integer;
{ BP } Constructor Init; Destructor Done;virtual;
{ Delphi } Procedure Free;virtual; {calls Destroy} Destructor Destroy;virtual; Constructor Create (aOwner : pObject); End; { TObject }
Constructor TObject.Init; Begin Parent := Nil; End; { TObject.Init } {////////////} Constructor TObject.Create; Begin Parent := aOwner; End; { TObject.Create } {////////////} Destructor TObject.Done; Begin Handle := 0; Name := ''; Parent := Nil; End; { TObject.Done } {////////////} Destructor TObject.Destroy; Begin Handle := 0; Name := ''; Parent := Nil; End; { TObject.Destroy } {////////////} Procedure TObject.Free; Begin {$ifdef debug}Writeln ('Free!');{$endif debug} Dispose (pObject (@Self), Destroy); End; { TObject.Free } {////////////}
Type PNewObj = ^NewObj; NewObj = Object (TObject) Constructor Create (aOwner:PObject); End; { NewObj }
Constructor NewObj.Create; Begin Inherited Create (aOwner); Name := 'Object Number 2 is a Child!'; Handle := -40; End; { NewObj.Create }
{ Program() } Var ThisObj : TObject; Begin Writeln ('Hello World!'); ThisObj.Init; With ThisObj do begin Handle := -1; Name := 'Object Number 1'; Child := New (PNewObj, Create (@ThisObj) ); Writeln ('My handle = ', Handle); Writeln ('My name = ', Name); Writeln ('Child handle = ', Child^.Handle); Writeln ('Child name = ', Child^.Name); Writeln ('Child PARENT handle = ', Child^.Parent^.Handle); Child^.Free; Done; end; { With Ob^ } Writeln ('Hello World Number 2 !!'); End { Program() }.
{ --- end cut ---}
Best regards, The Chief Dr Abimbola A. Olowofoyeku (The African Chief, and the Great Elephant) Author of: Chief's Installer Pro v3.12 for Win16 and Win32. Homepage: http://ourworld.compuserve.com/homepages/African_Chief/ E-mail: laa12@cc.keele.ac.uk