E2037 '%s' の宣言がすでに定義されているものと異なります (Delphi)
エラーと警告のメッセージ(Delphi) への移動
このエラーメッセージは,手続き,関数,メソッド,コンストラクタ,デストラクタのいずれかの宣言が前の(forward)宣言と異なっているときに表示されます。
このエラーメッセージは仮想メソッドをオーバーライドしようとしたときも表示されますが,オーバーライドではこれと異なるパラメータリスト,呼び出し規約が必要です。
program Produce; type MyClass = class procedure Proc(Inx: Integer); function Func: Integer; procedure Load(const Name: string); procedure Perform(Flag: Boolean); constructor Create; destructor Destroy(Msg: string); override; (*<-- ここでエラーメッセージ*) class function NewInstance: MyClass; override; (*<-- ここでエラーメッセージ*) end; procedure MyClass.Proc(Index: Integer); (*<-- ここでエラーメッセージ*) begin end; function MyClass.Func: Longint; (*<-- ここでエラーメッセージ*) begin end; procedure MyClass.Load(Name: string); (*<-- ここでエラーメッセージ*) begin end; procedure MyClass.Perform(Flag: Boolean); cdecl; (*<-- ここでエラーメッセージ*) begin end; procedure MyClass.Create; (*<-- ここでエラーメッセージ*) begin end; function MyClass.NewInstance: MyClass; (*<-- ここでエラーメッセージ*) begin end; begin end.
{ このように,このエラーメッセージが表示される原因はいくつもある }
program Solve; type MyClass = class procedure Proc(Inx: Integer); function Func: Integer; procedure Load(const Name: string); procedure Perform(Flag: Boolean); constructor Create; destructor Destroy; override; (*パラメータなし*) class function NewInstance: TObject; override; (*戻り値の型 *) end; procedure MyClass.Proc(Inx: Integer); (*パラメータ名 *) begin end; function MyClass.Func: Integer; (*戻り値の型 *) begin end; procedure MyClass.Load(const Name: string); (*パラメータの種類 *) begin end; procedure MyClass.Perform(Flag: Boolean); (*呼び出し規約*) begin end; constructor MyClass.Create; (*constructor*) begin end; class function MyClass.NewInstance: TObject; (*クラス関数*) begin end; begin end.
{ 「前の宣言」とエラーを起こした宣言を注意深く比較して 2 つの相違点を判別する必要がある }