AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Maßeinheiten als Typen

Ein Thema von Ghostwalker · begonnen am 11. Okt 2018 · letzter Beitrag vom 18. Okt 2018
Antwort Antwort
Seite 8 von 8   « Erste     678
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.992 Beiträge
 
Delphi 12 Athens
 
#71

AW: Maßeinheiten als Typen

  Alt 17. Okt 2018, 07:20
Bei "private const" stehen die Konstanten nur in einer konkreten Instanz (sprich Variable) zur Verfügung.
Folglich (und das hat mir der Delphi-Compiler recht deutlich mitgeteilt) kann man sie so nicht in den
Operatoren verwenden.
Also mein Compiler (10.2.3) findet das hier vollkommen OK:
Delphi-Quellcode:
  TGewicht = record
  private
    FValue : Extended;
  private const
    GrammPerKilo = 1000.0;
    GrammPerTonne = 1000.0*GrammPerKilo;
    GrammPerMegat = 1000.0*1000.0*GrammPerTonne;
  public
     Class Operator Implicit(const Value:TTonne):TGewicht;
  end;

class operator TGewicht.Implicit(const Value: TTonne): TGewicht;
begin
  Result.FValue := Value*GrammPerTonne;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#72

AW: Maßeinheiten als Typen

  Alt 17. Okt 2018, 08:49
Öhmm.....jup.....nochmal getestet...nu tuts.....komisch.

Am Rande

Delphi-Quellcode:
Type
  TGramm = -xxxxxx .. xxxxxx
  usw.

  TGewicht = record
    //wie gehabt
    Class Oporator Implicit(const value:int64):TGewicht;
    Class Operator Implicit(const value:TGewicht):Int64;

    Class Operator Implicit(const value:TGramm):TGewicht;
    Class Operator Implicit(const value:TKilo):TGewicht;
    Class Operator Implicit(const value:TTonne):TGewicht;


IMPLEMENTATION

Class Opertator TGewicht.Implicit(const value:int64):TGewicht;
begin
  result.fvalue := value;
end;

Class Opertator TGewicht.Implicit(const value:TGewicht):Int64;
begin
  result := value.fvalue;
end;

Class Opertator TGewicht.Implicit(const value:TGramm):TGewicht;
begin
  result.fvalue := value;
end;

Class Opertator TGewicht.Implicit(const value:TKilo):TGewicht;
begin
  result.fvalue := value*GrammPerKilo;
end;

Class Opertator TGewicht.Implicit(const value:TTonne):TGewicht;
begin
  result.fvalue := value*GrammPerTonne;
end;
In die IDE zeigt mir hier einen Fehler im Implementation Abschnitt an, das der Bezeichner redifiniert wird. Allerdings erst bei Implicit(const value:TKilo). Der Compiler läuft ohne Probleme durch, und lt. meinen
Unittests wird das ganze auch korrekt gehandhabt.
Uwe
e=mc² or energy = milk * coffee²

Geändert von Ghostwalker (17. Okt 2018 um 09:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#73

AW: Maßeinheiten als Typen

  Alt 17. Okt 2018, 09:04
Class Oporator Implicit(const value:int64):TGewicht; // <-- classname korrekt?
Class Opertator // <-- classname korrekt?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#74

AW: Maßeinheiten als Typen

  Alt 18. Okt 2018, 09:31
@Kodezwerg

Nope, da sind nur zwei Tippfehler hier im Forum drinn, im Quelltext is alles richtig geschrieben.
Außerdem würde da der Compiler auch Meckern.


Die Fehlermeldung ist:

"Bezeichner neu deklariert TGewicht.Implicit !"

Auch ein overload bei der Deklaration hilft leider nicht.
Uwe
e=mc² or energy = milk * coffee²

Geändert von Ghostwalker (18. Okt 2018 um 09:35 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:47 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