2013/10/25 Michael Van Canneyt <mich...@freepascal.org> > Why not simply make it a procedure that is called by ver-2 and ver-3. > > If it cannot be called directly from external code, and will called only > from inside a visible consructor, there is simply no reason to make this > procedure a constructor. A simple procedure will do.
Because I don't know how to make it non-constructor. See the following code: 1 unit wtree; 2 {$mode objfpc}{$H+} 3 interface 4 uses tree; 5 type 6 TQWordTree = specialize TTree<QWord>; 7 TWTree = class(TQWordTree) 8 private 9 FModel: string; 10 public 11 property Model: string read FModel; 12 constructor Create(AData: QWord; AParent: TWTree; AModel: string); 13 constructor Create(HeadNode, TailNode: QWord); 14 end; 15 implementation 16 17 constructor TWTree.Create(AData: QWord; AParent: TWTree; AModel: string); 18 begin 19 inherited Create(AData, AParent); 20 FModel := AModel; 21 end; 22 23 constructor TWTree.Create(HeadNode, TailNode: QWord); 24 begin 25 inherited Create(0, nil); 26 Data := HeadNode; 27 with TWTree do Create(TailNode, Create(HeadNode, Self, 'h'), 't'); 28 FModel := 'R'; 29 end; 30 31 end. Please tell me how to deal with line 27, which called the should-be-private constructor. BTW, this code uses TTree class, which is here: https://github.com/xrfang/fpcollection/blob/master/src/units/tree.pas Also, I don't understand why this does not work: f := TFileStream.Create; I know that TFileStream's Create require a file name parameter, but as TFileStream is inherited from TObject, which has a Create without parameter. This is why I feel that it is possible to HIDE a public constructor from ancestor. Best Regards, Xiangrong
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal