私はDelphiとLazarusの両方でチュートリアルを行っています。私はDelphi 10.1 Berlin Update 2とLazarus 1.6.2を使用しています。Delphiで有効なコンストラクタがLazarusで失敗するのはなぜですか?
次のコンストラクタはDelphiで動作しますが、TDog
クラスのコンストラクタは "重複した識別子"エラーが発生してLazarusで失敗します。
すべてのチュートリアルとフォーラム私はこのように見ていますが、これは問題ではありません。
unit Animal;
interface
uses
classes;
type
TAnimal = class
private
FName: String;
FBrain: Integer;
FBody: Integer;
FSize: Integer;
FWeight: Integer;
public
constructor create(Name: String; Brain, Body, Size, Weight: Integer);
procedure Eat; virtual;
property Name: String read FName;
property Brain: Integer read FBrain;
property Body: Integer read FBody;
property Size: Integer read FSize;
property Weight: Integer read FWeight;
end;
implementation
constructor TAnimal.create(Name: String; Brain, Body, Size, Weight: Integer);
begin
FName:= Name;
FBrain:= Brain;
FBody:= Body;
FSize:= Size;
FWeight:= Weight;
end;
procedure TAnimal.Eat;
begin
Writeln('TAnimal.eat called');
end;
end.
unit Dog;
interface
uses
classes,
Animal;
type
TDog = class (TAnimal)
private
FEyes: Integer;
FLegs: Integer;
FTeeth: Integer;
FTail: Integer;
FCoat: String;
procedure Chew;
public
constructor create(Name: String; Size, Weight, Eyes, Legs,
Teeth, Tail: integer; Coat: String);
procedure Eat; override;
end;
implementation
//following fails in Lazarus
constructor TDog.create(Name: String; Size, Weight, Eyes, Legs,
Teeth, Tail: integer; Coat: String);
//this works, changing implementation also
//constructor Create(aName: String; aSize, aWeight, Eyes, Legs,
// Teeth, Tail: integer; Coat: String);
begin
inherited Create(Name, 1, 1, Size, Weight);
FEyes:= Eyes;
FLegs:= Legs;
FTeeth:= Teeth;
FTail:= Tail;
FCoat:= Coat;
end;
procedure TDog.Chew;
begin
Writeln('TDog.chew called');
end;
procedure TDog.Eat;
begin
inherited;
Writeln('TDog.eat called');
chew;
end;
end.
差分パラメータで同じコンストラクタ名を複製しているので、コンストラクタを 'reintroduce 'するか、' {$ mode delphi} 'を使う必要があります。 –
応答をありがとう。私は{$ mode delphi}を試してみました。再導入は効果がなく、いずれもクラス名(Dog)をインスタンス変数として使用できません。 Delphiではすべてうまく動作しますが、これからはすべてをユニークに保ちます。 JavaとC#では、クラス名の後ろに小文字のクラスインスタンス変数を指定するのは、大文字と小文字が区別されるのでよくあることです。 –