Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   E2070 unbekannte Direktive 'operator' (https://www.delphipraxis.net/210038-e2070-unbekannte-direktive-operator.html)

delphifan2004 20. Feb 2022 14:35

Delphi-Version: 5

E2070 unbekannte Direktive 'operator'
 
Hallo,

meinen Quellcode hae ich aus Freepascal übernommen. Ich war der Ansicht, dass Operatoren mit der Direktive 'operator' seit Delphi 2006 (Turbo Delphi) längst auch in Delphi bekannt sind. Ist dem doch nicht so oder muss ich da irgendwas einstellen, damit ich solche Operatoren genau so wie mit Freepascal definieren kann? Oder unterscheidet sich hier nur die Syntax?

jaenicke 20. Feb 2022 15:33

AW: E2070 unbekannte Direktive 'operator'
 
Ich kenne die Syntax in FreePascal nicht, aber in Delphi sieht das so aus:
Delphi-Quellcode:
type
  TExample = record
  private
    FValue: Integer;
  public
    class operator Add(const AValue1, AValue2: TExample): TExample;
    class operator Implicit(const AValue: Integer): TExample;
    class operator Implicit(const AValue: TExample): Integer;
    class operator Implicit(const AValue: TExample): String;
  end;

{ TExample }

class operator TExample.Add(const AValue1, AValue2: TExample): TExample;
begin
  Result.FValue := AValue1.FValue + AValue2.FValue;
end;

class operator TExample.Implicit(const AValue: TExample): Integer;
begin
  Result := AValue.FValue;
end;

class operator TExample.Implicit(const AValue: TExample): String;
begin
  Result := AValue.FValue.ToString;
end;

class operator TExample.Implicit(const AValue: Integer): TExample;
begin
  Result.FValue := AValue;
end;

// Beispiel:
var
  Test: TExample;
begin
  Test := 40;
  ShowMessage(Test + 2);
end;

delphifan2004 20. Feb 2022 17:06

AW: E2070 unbekannte Direktive 'operator'
 
Ah, ok, die Syntax unterscheidet sich also hier von der in Freepascal. Danke!

Aber eine Verständnisfrage habe ich doch noch:

Wie Werte Ich den TExample Typ aus. Erhalte ich dann einfach TExample.FValue zurück? So hier:

[delphi]

var
myVal: TExample;
resVal: TExample;

myVal.Implicit(100).FValue := ...

oder

resVal := myVal.Add(20,30);

Dann resVal.FValue verwenden?

DeddyH 20. Feb 2022 19:09

AW: E2070 unbekannte Direktive 'operator'
 
Die Dinger heißen Operatoren, weil sie auch tatsächlich welche sind. Add ist z.B. dafür da, dass man Werte einfach mit“+“ hinzuaddieren kann. Implicit und Explicit sind für Zuweisungen mittels „:=„ zuständig.

delphifan2004 20. Feb 2022 20:13

AW: E2070 unbekannte Direktive 'operator'
 
@DeddyH: Das weiß ich, meine vorherige Frage bozog sich auf die Verwendung der Daten. Ist die Syntax in meinem Beitrag oben richtig, wenn ich die Wperatoren Ergebnisse auswerten will?

jaenicke 21. Feb 2022 08:19

AW: E2070 unbekannte Direktive 'operator'
 
Zitat:

Zitat von delphifan2004 (Beitrag 1502515)
Wie Werte Ich den TExample Typ aus. Erhalte ich dann einfach TExample.FValue zurück? So hier:

[delphi]

var
myVal: TExample;
resVal: TExample;

myVal.Implicit(100).FValue := ...

oder

resVal := myVal.Add(20,30);

Dann resVal.FValue verwenden?

Weder macht es Sinn die Operatoren so aufzurufen noch ist es möglich. Wozu denn auch? :shock:
Wenn du das möchtest, musst du normale Methoden verwenden.

Operatoren existieren nicht als normale Klassenmethoden mit diesem Namen (und deine Aufrufe passen auch gar nicht dazu, selbst wenn es ginge). Sie sind nur als Operatoren verwend- oder aufrufbar.

Und irgendwie erweckt die Frage den Eindruck, dass du die Verwendung noch nicht ganz verstanden hast. Den Wert bekommst du über den implicit Typecast Operator direkt, ohne Zugriff auf FValue. Das zeigt ja auch mein Beispielaufruf.

KodeZwerg 21. Feb 2022 09:27

AW: E2070 unbekannte Direktive 'operator'
 
Zitat:

Zitat von delphifan2004 (Beitrag 1502515)
Ah, ok, die Syntax unterscheidet sich also hier von der in Freepascal.

In wie fern ist es bei FreePascal anders?
Zitat:

the syntax must be compatible with Delphi.
Lediglich der Operatoren Bezeichner.
Zitat:

Note that some FPC operators do not have an equivalent usin a Delphi name.
Nachdem ich alles hier gelesen habe würde ich gern mal auf das hier eingehen:
Zitat:

Zitat von delphifan2004 (Beitrag 1502511)
meinen Quellcode hae ich aus Freepascal übernommen.

Bitte zeige mal etwas davon, ich vermute du redest bzw meinst etwas anderes.

dummzeuch 21. Feb 2022 11:27

AW: E2070 unbekannte Direktive 'operator'
 
Geht es hier eigentlich wirklich um Delphi 5, wie im OP angegeben?

Wenn ja: Delphi 5 kannte noch keine enhanced records.

TiGü 22. Feb 2022 07:52

AW: E2070 unbekannte Direktive 'operator'
 
Zitat:

Zitat von dummzeuch (Beitrag 1502543)
Geht es hier eigentlich wirklich um Delphi 5, wie im OP angegeben?

Wenn ja: Delphi 5 kannte noch keine enhanced records.

Geht es in 99 % der Fälle nie. Das ist ein Default-Wert, den man bei Thread-Erstellung in diesem Unterforum abändern kann, aber da achtet keiner drauf.
Eigentlich kann das weg, weil das immer nur zu "ist das wirklich Delphi 5"-Nachfragen führt.

jaenicke 22. Feb 2022 09:34

AW: E2070 unbekannte Direktive 'operator'
 
Zitat:

Zitat von TiGü (Beitrag 1502564)
Eigentlich kann das weg, weil das immer nur zu "ist das wirklich Delphi 5"-Nachfragen führt.

Besser wäre, wenn es unbelegt wäre und man es auswählen muss, bevor man einen Beitrag abschickt. Oder zumindest mit "Unbekannt / Geheim" :-D vorbelegt wäre.

In diesem Fall steht aber ja im Beitrag worum es geht:
Zitat:

Zitat von delphifan2004 (Beitrag 1502511)
Ich war der Ansicht, dass Operatoren mit der Direktive 'operator' seit Delphi 2006 (Turbo Delphi) längst auch in Delphi bekannt sind.

Insofern war ja klar, dass es um neuere Versionen geht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:39 Uhr.
Seite 1 von 2  1 2      

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