Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Verständnisproblem: overload virtual abstract - vererben (https://www.delphipraxis.net/180768-verstaendnisproblem-overload-virtual-abstract-vererben.html)

Photoner 16. Jun 2014 16:04

Delphi-Version: XE5

Verständnisproblem: overload virtual abstract - vererben
 
Hi,

ich hab ein Verständnisproblem mit dem vererben von überladenen abstrakten Funktionen. Ich hab auch schon im Forum gesucht; die Themen sind glaub ich ähnlich, aber die Lösungen funktionieren in meinem Fall nicht, bzw. ich verstehe es nicht.

Was ich versuche:

Delphi-Quellcode:
TBasis=class
 public
  Procedure BspProc(ParA : TParameterTypA); overload; virtual; abstract;
  Procedure BspProc(ParB : TParameterTypB); overload; virtual; abstract;
Jetzt ableiten wie folgt:

Delphi-Quellcode:
TErbe=class(TBasis)
 public
  Procedure BspProc(ParA : TParameterTypA); overload; override;
  Procedure BspProc(ParB : TParameterTypB); overload; override;
Dann erhalte ich

Code:
[dcc32 Fehler] ErbeClass.pas(55): E2037 Deklaration von 'BspProc' unterscheidet sich von vorheriger Deklaration
Doppelklicken schmeißt mich in die Zeilen:

Delphi-Quellcode:
Procedure TErbe.BspProc(ParA : TParameterTypA);
begin

end
Was ist daran falsch, was muss man korrigieren?

Grüße!

Neutral General 16. Jun 2014 16:17

AW: Verständnisproblem: overload virtual abstract - vererben
 
Guck nochmal genau ob du die Parameter auch exakt richtig geschrieben hast vom Namen/Typ her.
Ziemlich sicher hast du da in der Klasse etwas anders definiert hast als unten im implementation Teil.

Bei mir geht das nämlich ohne Probleme:

Delphi-Quellcode:
type
  TParameterTypA = String;
  TParameterTypB = Integer;

  TBasis=class
  public
    Procedure BspProc(ParA : TParameterTypA); overload; virtual; abstract;
    Procedure BspProc(ParB : TParameterTypB); overload; virtual; abstract;
  end;

  TErbe=class(TBasis)
  public
    Procedure BspProc(ParA : TParameterTypA); overload; override;
    Procedure BspProc(ParB : TParameterTypB); overload; override;
  end;


implementation

{$R *.dfm}

{ TErbe }

procedure TErbe.BspProc(ParA: TParameterTypA);
begin

end;

procedure TErbe.BspProc(ParB: TParameterTypB);
begin

end;

Uwe Raabe 16. Jun 2014 16:19

AW: Verständnisproblem: overload virtual abstract - vererben
 
Sowas wird gelegentlich auch durch gleichnamige Typen in dem unterschiedlichen Scope der beiden Klassen ausgelöst.

mkinzler 16. Jun 2014 16:21

AW: Verständnisproblem: overload virtual abstract - vererben
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1262497)
Sowas wird gelegentlich auch durch gleichnamige Typen in dem unterschiedlichen Scope der beiden Klassen ausgelöst.

Wo sind die Typen deklariert? Ich vermute mal in beiden Units; dann sind sie für den Compiler 2 verschiedene Typen, welche zufällig gleich heißen.

Photoner 16. Jun 2014 16:36

AW: Verständnisproblem: overload virtual abstract - vererben
 
Da wird der Wiener im Hotdog verrückt. Es war alles richtig geschrieben. Das Problem lag daran, dass
Code:
TParameterTypA = TBitmap
war. Hatte die VCL.Graphics und die Winapi.Windows in der Unit mit dem Erben eingebunden. TBitmap kommt in beiden vor.....aaaargh

Dankeschön fürs nachprüfen!

Photoner 16. Jun 2014 16:37

AW: Verständnisproblem: overload virtual abstract - vererben
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1262497)
Sowas wird gelegentlich auch durch gleichnamige Typen in dem unterschiedlichen Scope der beiden Klassen ausgelöst.

Korrekt :-D

himitsu 16. Jun 2014 17:42

AW: Verständnisproblem: overload virtual abstract - vererben
 
Als Erstes Strg+Linksklick auf die Typen oder im Hint zum Typ nachsehen wo das herkommt, wenn einem mal wieder sowas irgendwie nicht ganz koscher vorkommt.

Alternativ hätte natürlich auch sein können, daß man gleichnamige Methoden nicht überladen kann, aber ich war mir recht sicher, daß sowas schon öfters mal gemacht wurde.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:45 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