Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehler "Type-Parameter 'T' must be value type" obwohl er es ist (https://www.delphipraxis.net/209348-fehler-type-parameter-t-must-value-type-obwohl-er-es-ist.html)

Der schöne Günther 25. Nov 2021 09:51

Delphi-Version: 10.4 Sydney

Fehler "Type-Parameter 'T' must be value type" obwohl er es ist
 
Ich habe folgenden Code der unter 10.0 Seattle bestens funktioniert hat, unter 10.4 Sydney allerdings streikt:

Delphi-Quellcode:
program Project1;

type
   TSomeClass<T: record> = class abstract(TObject)
      //
   end;

   TSomeRecord = record
      someValueType: Byte;
      //someManagedType: IInterface;
   end;

   TRecordClass = class abstract(TSomeClass<TSomeRecord>)
      //
   end;

begin
   //
end.
Wenn
Delphi-Quellcode:
TSomeRecord
nun ein Feld vom Typ
Delphi-Quellcode:
IInterface
enthält dann streikt 10.4.

Bemängelt wird die Zeile
Delphi-Quellcode:
TRecordClass = class abstract(TSomeClass<TSomeRecord>)
mit dem Hinweis
Zitat:

[dcc32 Error] Project1.dpr(16): E2512 Type parameter 'T' must be a non-nullable value type
Ich verstehe das nicht. Was genau ist sein Problem?

TiGü 25. Nov 2021 10:05

AW: Fehler "Type-Parameter 'T' must be value type" obwohl er es ist
 
Have you turn it off and on again? :spin2:

Hier geht's ohne Probleme.

Embarcadero® Delphi 10.4 Version 27.0.40680.4203
Delphi 10.4 Update 2

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

  type
   TSomeClass<T: record> = class abstract(TObject)
   public
     FRecord: T;
   end;

   TSomeRecord = record
      someValueType: Byte;
      someManagedType: IInterface;
   end;

   TRecordClass = class abstract(TSomeClass<TSomeRecord>)
      //
   end;

begin
  try
    Writeln(TSomeClass<TSomeRecord>.ClassName);
    Writeln(TRecordClass.ClassName);
    var Günni := TRecordClass.Create;
    Writeln(Günni.FRecord.someValueType.ToString);
    Writeln(THandle(Günni.FRecord.someManagedType).ToString);
    Günni.Free;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;
end.
Code:
TSomeClass<Project1.TSomeRecord>
TRecordClass
0
0

Der schöne Günther 25. Nov 2021 10:17

AW: Fehler "Type-Parameter 'T' must be value type" obwohl er es ist
 
Alles klar, gut zu wissen.

Bei mir ist es wohl was älter:
Zitat:

Embarcadero® Delphi 10.4 Version 27.0.37889.9797
Meins ist dann wohl "10.4.0" und deins ist "10.4.2", richtig verstanden?

TiGü 25. Nov 2021 10:21

AW: Fehler "Type-Parameter 'T' must be value type" obwohl er es ist
 
Liste der Anhänge anzeigen (Anzahl: 1)
Was sagt denn dein GetIt Package Manager unter Categories | Patches and Hotfixes?
Da gab es zwei im April und einen im Mai?

Anhang 54644

Uwe Raabe 25. Nov 2021 11:04

AW: Fehler "Type-Parameter 'T' must be value type" obwohl er es ist
 
Sieht irgendwie nach diesem Fehler aus: Generic record constraints broken in Update 2. Ist offenbar in in 10.4.1 gefixt.

Der schöne Günther 25. Nov 2021 11:43

AW: Fehler "Type-Parameter 'T' must be value type" obwohl er es ist
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also wenn ich das richtig verstehe sollte ich den "10.4.2 Installer for earlier 10.4 Releases 1.0" installieren.

TiGü 25. Nov 2021 12:41

AW: Fehler "Type-Parameter 'T' must be value type" obwohl er es ist
 
Jo, trau dich!

himitsu 25. Nov 2021 13:07

AW: Fehler "Type-Parameter 'T' must be value type" obwohl er es ist
 
Zitat:

Type parameter 'T' must be a non-nullable value type
Das müsste dann doch auch andere Typen betreffen, wie String, Variant und dynamische Arrays.

Der schöne Günther 25. Nov 2021 14:49

AW: Fehler "Type-Parameter 'T' must be value type" obwohl er es ist
 
Richtig.
Delphi-Quellcode:
IInterface
war nur ein mögliches Beispiel.

Der schöne Günther 25. Nov 2021 15:23

AW: Fehler "Type-Parameter 'T' must be value type" obwohl er es ist
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von TiGü (Beitrag 1498181)
Jo, trau dich!

Nachdem es mein 10.4 deinstalliert hat scheitert die Installation mit einem "500 Internal Server error".

Gut, dass ich mich zwar getraut habe, aber schon lange nicht mehr so mutig bin, das RAD Studio auf einem echten Pc zu installieren sondern nur noch VMs.


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