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/)
-   -   Delphi W1048 Unsichere Typumwandlung obwohl völlig ok (https://www.delphipraxis.net/194899-w1048-unsichere-typumwandlung-obwohl-voellig-ok.html)

Der schöne Günther 17. Jan 2018 11:20

Delphi-Version: 5

W1048 Unsichere Typumwandlung obwohl völlig ok
 
Ich habe in einem Projekt zwei Klassen mit ungefähr diesem Konstrukt:

Delphi-Quellcode:
unit MeineUnit;

interface uses System.TimeSpan;

type
   TMyObject = class
   private/protected var
      someInternalField: TTimeSpan;
   public
      constructor Create();
   end;

implementation

constructor TMyObject.Create()
begin
   inherited Create();
   someInternalField := TTimeSpan.Zero; // << W1048
end;
In beiden Units wird die Zeile
Delphi-Quellcode:
someInternalField := TTimeSpan.Zero;
angekreidet, es sei eine "W1048 Unsichere Typumwandlung von 'TTimeSpan' nach 'TTimeSpan'".

Potz Donner. Was läuft hier verkehrt?

Ich kann das in einem neuen, leeren Projekt mit beiden Units mit 1:1 dem gleichen Inhalt nicht nachvollziehen. Ich bekomme es echt nicht rekonstruiert.

Uwe Raabe 17. Jan 2018 11:54

AW: W1048 Unsichere Typumwandlung obwohl völlig ok
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1391203)
Ich habe in einem Projekt zwei Klassen mit ungefähr diesem Konstrukt:

Dann versuch mal, das "ungefähr" zu eliminieren.

Der schöne Günther 17. Jan 2018 12:09

AW: W1048 Unsichere Typumwandlung obwohl völlig ok
 
Die Vereinfachung bezog sich nur auf den geposteten Code. Ich bekomme es mit EXAKT den gleichen Units nicht in einem leeren Projekt reproduziert. Oder habe ich das jetzt falsch verstanden?

Edit:
Die Ursache lag in der Unit welche sich eine Instanz von
Delphi-Quellcode:
TMyObject
erstellt hat. Sie hatte
Delphi-Quellcode:
uses [...], Spring
und ebendiese Unit redeklariert in ihrem Interface-Teil (weshalb auch immer)
Delphi-Quellcode:
TTimeSpan = TimeSpan.TTimeSpan;
.
Wenn ich dort nun ein reines "TTimeSpan" benutze, dann ist es ein Spring.TTimeSpan und kein System.TimeSpan.TTimeSpan, obwohl es eigentlich nur ein Alias ist.

Warum der Compiler nun den Konstruktor anstreicht und nicht die Zeile wo ein Spring.TTimeSpan einer System.TimeSpan.TTimeSpan-Property zugewiesen weiß ich allerdings auch nicht.

Immerhin bin ich die Warnung los.

Uwe Raabe 17. Jan 2018 12:17

AW: W1048 Unsichere Typumwandlung obwohl völlig ok
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1391210)
Ich bekomme es mit EXAKT den gleichen Units nicht in einem leeren Projekt reproduziert.

Dann überprüf mal, ob eventuell bei den Suchpfaden irgendetwas zu finden ist, bei dem TTimeSpan neu deklariert wurde.

Also z.B. im interface-Teil wird TTimeSpan aus System.TimeSpan verwendet und im implementation-Teil hängt sowas wie dies dazwischen:

Delphi-Quellcode:
uses
  System.TimeSpan;

type
  TTimeSpan = type System.TimeSpan.TTimeSpan;

Der schöne Günther 17. Jan 2018 12:19

AW: W1048 Unsichere Typumwandlung obwohl völlig ok
 
Siehe mein Edit darüber: Du liegst (wie immer) absolut richtig 8-)

Ich würde es einsehen wenn, wie in deinem Beispiel, ein neuer Typ deklariert wird. Hier ist es eigentlich nur ein Alias. Komisch.

himitsu 17. Jan 2018 12:43

AW: W1048 Unsichere Typumwandlung obwohl völlig ok
 
Arbeitest du mit Laufzeitpackages?

Der Typ in im nachfolgenden Package ist nur eine Variable, die beim Laden der BPL die Referenz des aktuellen Typ im ersten Package bekommt.

Der schöne Günther 17. Jan 2018 12:52

AW: W1048 Unsichere Typumwandlung obwohl völlig ok
 
Zitat:

Zitat von himitsu (Beitrag 1391216)
Arbeitest du mit Laufzeitpackages?

Nein, nie.

Vielleicht aber liegt es daran dass er von Spring natürlich nicht jedes mal neu kompiliert sondern fertige DCUs nimmt?

Sherlock 17. Jan 2018 13:46

AW: W1048 Unsichere Typumwandlung obwohl völlig ok
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1391212)
Delphi-Quellcode:
uses
  System.TimeSpan;

type
  TTimeSpan = type System.TimeSpan.TTimeSpan;

Man darf sich aber schon wundern, wozu das gut ist, oder?

Sherlock

himitsu 17. Jan 2018 13:50

AW: W1048 Unsichere Typumwandlung obwohl völlig ok
 
PS: Das von Uwe war nur ein Beispiel, was wohl im Delphi nicht wirklich so aussieht.


Ein Typ gleichen Aufbaus, der aber nicht mit dem Anderen "kompatibel" ist?
z.B. für Typen, welche eine andere Art von Daten enthalten, aber wo man sich sparen möchte es neu zu definieren.

Delphi-Quellcode:
type
  TMyType = type Integer;

procedure Test(X: Integer); overload;
procedure Test(W: TMyType); overload;
Bei
Delphi-Quellcode:
TMyType = Integer;
wüsste der Compiler garnicht welche Funktion er nehmen soll.

Sherlock 17. Jan 2018 14:29

AW: W1048 Unsichere Typumwandlung obwohl völlig ok
 
Das ist mir klar, und wenn man einen Bezeichner für den "neuen" Typen verwendet, der nicht für Unmut sorgt zB
Delphi-Quellcode:
TSherlockTimeSpan = type System.TimeSpan.TTimeSpan;
, ist auch alles Bestens. Aber Spring scheint das ja nicht getan zu haben, darum meine Frage: "Wozu?".

Sherlock


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