E2037 Deklaration von '%s' unterscheidet sich von vorheriger Deklaration (Delphi)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Fehler- und Warnungsmeldungen (Delphi)

Diese Fehlermeldung tritt auf, wenn die Deklaration einer Prozedur, einer Funktion, einer Methode, eines Konstruktors oder eines Destruktors nicht mit der bisherigen (Forward-)Deklaration übereinstimmt.

Diese Fehlermeldung tritt außerdem auf, wenn Sie versuchen, eine virtuelle Methode zu überschreiben, die überschreibende Methode jedoch eine andere Parameterliste, andere Aufrufkonventionen usw. aufweist.


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;      (*<-- Hier die Fehlermeldung*)
    class function NewInstance: MyClass; override;  (*<-- Hier die Fehlermeldung*)
  end;

procedure MyClass.Proc(Index: Integer);             (*<-- Hier die Fehlermeldung*)
begin
end;

function MyClass.Func: Longint;                     (*<-- Hier die Fehlermeldung*)
begin
end;

procedure MyClass.Load(Name: string);               (*<-- Hier die Fehlermeldung*)
begin
end;

procedure MyClass.Perform(Flag: Boolean); cdecl;    (*<-- Hier die Fehlermeldung*)
begin
end;

procedure MyClass.Create;                           (*<-- Hier die Fehlermeldung*)
begin
end;

function MyClass.NewInstance: MyClass;              (*<-- Hier die Fehlermeldung*)
begin
end;

begin
end.

Wie Sie sehen können, gibt es eine ganze Reihe von Ursachen für diese Fehlermeldung.


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;                   (*Keine Parameter*)
    class function NewInstance: TObject; override;  (*Ergebnistyp   *)
  end;

procedure MyClass.Proc(Inx: Integer);               (*Parametername  *)
begin
end;

function MyClass.Func: Integer;                     (*Ergebnistyp  *)
begin
end;

procedure MyClass.Load(const Name: string);         (*Parameterart  *)
begin
end;

procedure MyClass.Perform(Flag: Boolean);           (*Aufrufkonvention*)
begin
end;

constructor MyClass.Create;                         (*Konstruktor*)
begin
end;

class function MyClass.NewInstance: TObject;        (*Klassenfunktion*)
begin
end;

begin
end.

Sie müssen die 'vorherigen Deklaration' sorgfältig mit der vergleichen, die den Fehler ausgelöst hat, um Unterschiede zwischen den beiden Deklarationen feststellen zu können.