Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi virtual; override; Field definition not allowed after method (https://www.delphipraxis.net/85589-virtual%3B-override%3B-field-definition-not-allowed-after-method.html)

yankee 1. Feb 2007 22:16


virtual; override; Field definition not allowed after method
 
Hi @ll,

ich habe vollgenden (aufs wesentliche gekürtzten) Quelltext:
Delphi-Quellcode:
TLeanoFloat =class;

TLeanoVar =class
  public
    function ToFloat:TLeanoFloat; virtual; abstract;
    procedure Add(arg:TLeanoVar); virtual;
    procedure Sub(arg:TLeanoVar); virtual;
    procedure Multiply(arg:TLeanoVar); virtual;
    procedure Divide(arg:TLeanoVar); virtual;
end;

TLeanoFloat =class(TLeanoVar)
  public
    procedure Add(arg:TLeanoVar); virtual; override; // <--- HIER
    procedure Sub(arg:TLeanoVar); virtual; override;
    procedure Multiply(arg:TLeanoVar); virtual; override;
    procedure Divide(arg:TLeanoVar); virtual; override;
    value: extended;
    constructor Create(v: extended);
    function ToFloat:TLeanoFloat;
end;
An der markierten Stelle bekomme ich die Fehlermeldung

[Error] UParserVars.pas(35): E2169 Field definition not allowed after methods or properties

WIESO?
Es sind nicht nur keine Field definitions davor, es sind GARKEINE definitions davor. Oder sehe ich da was falsch?

EDIT: Ehe jetzt jemand sagt, ich soll
value:Extended höher verschieben: So war es am Anfang... Gleicher Fehler in gleicher zeile... Ich habe die virtual; override;-Funktionen danach erst hochgeschoben...

EDIT2: Delphi 2k5

Hawkeye219 1. Feb 2007 22:23

Re: virtual; override; Field definition not allowed after me
 
Hi yankee,

versuche es mal so:

Delphi-Quellcode:
TLeanoFloat =class(TLeanoVar)
  public
    value: extended;
    procedure Add(arg:TLeanoVar); override;
    procedure Sub(arg:TLeanoVar); override;
    procedure Multiply(arg:TLeanoVar); override;
    procedure Divide(arg:TLeanoVar); override;
    constructor Create(v: extended);
    function ToFloat:TLeanoFloat;
end;
Gruß Hawkeye

yankee 1. Feb 2007 22:27

Re: virtual; override; Field definition not allowed after me
 
mhh... stimmt...
In der Superklasse sind die Funktionen ja längst als virtual deklariert. Das muss man ja nicht nochmal machen ;-).

Obwohl die Fehlermeldung schon etwas verwirrend ist...

Danke jedenfalls...

jbg 2. Feb 2007 00:26

Re: virtual; override; Field definition not allowed after me
 
Zitat:

Zitat von yankee
Obwohl die Fehlermeldung schon etwas verwirrend ist...

Du hast noch nicht gesehen, was der MSVC++ Compiler so alles bei Templates ausspuckt wenn er schlecht aufgelegt ist.

Muehle 2. Feb 2007 07:18

Re: virtual; override; Field definition not allowed after me
 
Eigentlich muss du dir hier nur merken, das virtual und override zusammengehören.

Als virtual deklarierst du deine Methode in der Basisklasse. In der abgeleiteten
Klasse kannst du sie dann mit override überschreiben.

Dein Fehler war die doppelte Benutzung des Wörtchens virtual (nämlich auch in der abgel. Klasse).

Hawkeye219 2. Feb 2007 08:01

Re: virtual; override; Field definition not allowed after me
 
Zitat:

Zitat von Muehle
Dein Fehler war die doppelte Benutzung des Wörtchens virtual (nämlich auch in der abgel. Klasse).

Jein, das Feld value muß vor den Methoden definiert werden - zumindest bei älteren Delphi-Version. Bei neueren ist die Definition von Feldern nach den Methoden zulässig, sie müssen dann aber dann in einem VAR-Bereich innerhalb der Klassendefinition stehen. Die Fehlermeldung wäre also auch nach dem Entfernen der fehlerhaften VIRTUAL-Direktiven erschienen.

Gruß Hawkeye


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