AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Fehler "Type-Parameter 'T' must be value type" obwohl er es ist
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Der schöne Günther · begonnen am 25. Nov 2021 · letzter Beitrag vom 25. Nov 2021
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

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

  Alt 25. Nov 2021, 09:51
Delphi-Version: 10.4 Sydney
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 TSomeRecord nun ein Feld vom Typ IInterface enthält dann streikt 10.4.

Bemängelt wird die Zeile
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?
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#2

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

  Alt 25. Nov 2021, 10:05
Have you turn it off and on again?

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
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

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

  Alt 25. Nov 2021, 10:17
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?
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#4

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

  Alt 25. Nov 2021, 10:21
Was sagt denn dein GetIt Package Manager unter Categories | Patches and Hotfixes?
Da gab es zwei im April und einen im Mai?

patches.png
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

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

  Alt 25. Nov 2021, 11:04
Sieht irgendwie nach diesem Fehler aus: Generic record constraints broken in Update 2. Ist offenbar in in 10.4.1 gefixt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

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

  Alt 25. Nov 2021, 11:43
Also wenn ich das richtig verstehe sollte ich den "10.4.2 Installer for earlier 10.4 Releases 1.0" installieren.
Miniaturansicht angehängter Grafiken
rad-setup.png  
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#7

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

  Alt 25. Nov 2021, 12:41
Jo, trau dich!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#8

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

  Alt 25. Nov 2021, 13:07
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

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

  Alt 25. Nov 2021, 14:49
Richtig. IInterface war nur ein mögliches Beispiel.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

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

  Alt 25. Nov 2021, 15:23
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.
Miniaturansicht angehängter Grafiken
rad-setup-2.png  
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:18 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