Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Compilerfehler: E2137 Method not found in base class (https://www.delphipraxis.net/169783-compilerfehler-e2137-method-not-found-base-class.html)

BlackSeven 11. Aug 2012 10:28

Delphi-Version: XE2

Compilerfehler: E2137 Method not found in base class
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen!

Ich erhalte bei folgendem simplen Konstrukt einen Compilerfehler:
Delphi-Quellcode:
unit uTest1;

interface

type

  TTestBase = class
  protected

    function DoRead(var AData; const ABytesToRead: Cardinal): Boolean; overload;
    function DoRead(var AData; const ABytesToRead: Cardinal; out ABytesRead: Cardinal): Boolean; overload; virtual;

  end;

implementation

function TTestBase.DoRead(var AData; const ABytesToRead: Cardinal): Boolean;
begin
  //
end;

function TTestBase.DoRead(var AData; const ABytesToRead: Cardinal; out ABytesRead: Cardinal): Boolean;
begin
  //
end;

end.
Delphi-Quellcode:
unit uTest2;

interface

uses

  uTest1;

type

  TTest = class(TTestBase)
  protected

    function DoRead(var AData; const ABytesToRead: Cardinal; out ABytesRead: Cardinal): Boolean; override; <--- hier

  end;
 
implementation

function TTest.DoRead(var AData; const ABytesToRead: Cardinal; out ABytesRead: Cardinal): Boolean;
begin
  //
end;

end.
Vieleicht kann mir jemand auf die Sprünge helfen.
Danke.

mkinzler 11. Aug 2012 10:33

AW: Compilerfehler: E2137 Method not found in base class
 
Bei AData fehlt der Typ. Die Signaturen der beiden Methoden scheint für den Compiler nicht eindeutig verschieden zu sein.
Ich würde den 4. Parameter als optionalen Defaultparameter implementieren.

BlackSeven 11. Aug 2012 10:37

AW: Compilerfehler: E2137 Method not found in base class
 
Danke. Wenn ich die beiden Klassen in derselben Unit definiere, funktioniert es.
Bin gerade dabei, die Klassen in getrennte Units auszulagern.

BlackSeven 11. Aug 2012 10:47

AW: Compilerfehler: E2137 Method not found in base class
 
Zitat:

Zitat von mkinzler (Beitrag 1177801)
Bei AData fehlt der Typ

Ist ein "Untyped Parameter". Schreibe gerade so etwas Ähnliches wie die TStream-Klasse.

Delphi-Quellcode:
 TStream = class(TObject)
 
    function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; overload; virtual;
    procedure ReadBuffer(var Buffer; Count: Longint);
    procedure WriteBuffer(const Buffer; Count: Longint);

 ...

Ralf Kaiser 11. Aug 2012 21:47

AW: Compilerfehler: E2137 Method not found in base class
 
In der zweiten Unit hast du die Methode mit "override" deklariert. In der ersten Unit ist in der Basisklasse die entsprechende Methode allerdings nicht "virtual", oder sehe ich das falsch?

BlackSeven 12. Aug 2012 09:26

AW: Compilerfehler: E2137 Method not found in base class
 
Zitat:

Delphi-Quellcode:
function DoRead(var AData; const ABytesToRead: Cardinal): Boolean; overload;
function DoRead(var AData; const ABytesToRead: Cardinal; out ABytesRead: Cardinal): Boolean; overload; virtual;

Das müsste passen. Nur die 2. Funktion soll überschrieben werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz