E2037 '%s' の宣言がすでに定義されているものと異なります (Delphi)

提供: RAD Studio
移動先: 案内検索

エラーと警告のメッセージ(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 つの相違点を判別する必要がある }