E2037 Deklaration von '%s' unterscheidet sich von vorheriger Deklaration (Delphi)
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.