AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

F2084 beim kompilieren in Win32

Ein Thema von BigAl · begonnen am 30. Mai 2023 · letzter Beitrag vom 1. Jun 2023
Antwort Antwort
Seite 1 von 2  1 2      
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#1

F2084 beim kompilieren in Win32

  Alt 30. Mai 2023, 22:39
Hallo zusammen,

gestern hat mich ein interner Fehler ("[dcc32 Fatal Error] (...): F2084 Internal Error: C2210") ziemlich viele Nerven gekostet. Ich habe da jetzt einen Workaround, würde den Fehler aber trotzdem gerne melden. Dazu habe ich die recht umfangreiche Unit weit möglichst reduziert bzw. versucht den Fehler nachzustellen. Hier mal der Quellcode:
Delphi-Quellcode:
unit Unit1;

interface

type
  TClass1<T> = class
    FValue: T;
    procedure SetValue(const AValue: T);
  end;

  TClass2 = class(TClass1<Double>) // or <Extended> (e.g. <Single> works)
  end;

implementation

procedure TClass1<T>.SetValue(const AValue: T);
begin
  if AValue <> FValue then // <-- Here I get "[dcc32 Fatal Error] Unit1.pas(23): F2084 Internal Error: C2210"
    FValue := AValue;
end;

end.
Kann mal jemand testen ob es bei ihm auch einen Fehler gibt? Könnte ja immer noch an meinem System (oder an mir) liegen. Vielleicht übersehe ich ja was.

Der Fehler tritt nur bei Win32 auf (Win64 kompiliert). Natürlich macht der Code keinen Sinn und dient nur der Nachstellung des Fehlers.

Ach ja: Mein Workaraund nutzt jetzt halt einen IComparer<T> . Dann funktioniert es...

EDIT: Hab es noch weiter gekürzt.
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)

Geändert von BigAl (30. Mai 2023 um 22:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: F2084 beim kompilieren in Win32

  Alt 30. Mai 2023, 23:06
Ja, den Fehler bekomme ich auch und die Lösung mit dem TComparer/IComparer ist auch korrekt.

Korrekt wäre z.B. ein "E2015 Operator not applicable to this operand type", wenn der Compiler mit dem Vergleich nicht klarkommt.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#3

AW: F2084 beim kompilieren in Win32

  Alt 30. Mai 2023, 23:09
Ja, den Fehler bekomme ich auch und die Lösung mit dem TComparer/IComparer ist auch korrekt.

Korrekt wäre z.B. ein "E2015 Operator not applicable to this operand type", wenn der Compiler mit dem Vergleich nicht klarkommt.
Danke für die Antwort. Wenn Du schreibst "korrekt wäre" heisst das man darf keine generische Typen auf Ungleichheit bzw. Gleichheit prüfen? Bin gerade verwirrt...
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: F2084 beim kompilieren in Win32

  Alt 30. Mai 2023, 23:42
Das es sowohl in Win64 als auch mit <Single> funktioniert, ist es wohl doch eher ein Fehler im Compiler. Schließlich darf das Compilieren nicht davon abhängen, welche Instanz man von dem Generic erzeugt.

Mach bitte einen QP-Eintrag dafür auf, damit das baldmöglichst behoben werden kann.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#5

AW: F2084 beim kompilieren in Win32

  Alt 30. Mai 2023, 23:44
Das es sowohl in Win64 als auch mit <Single> funktioniert, ist es wohl doch eher ein Fehler im Compiler. Schließlich darf das Compilieren nicht davon abhängen, welche Instanz man von dem Generic erzeugt.

Mach bitte einen QP-Eintrag dafür auf, damit das baldmöglichst behoben werden kann.
Da war schon einer schneller: RSP-41205
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: F2084 beim kompilieren in Win32

  Alt 30. Mai 2023, 23:49
Man kann den Typen T einschränken, dann gibt es hier keine Probleme, wenn dieser Basistyp das Gewünschte bietet.
Ist es nicht eingeschränkt, dann kann es sein, dass es im Compiler keinen Default-Comparer für diesen Typ gibt, darum der Fehler.

Natürlich wäre eine mögliche Lösung selber über TComparer/IComarer zu gehen und es erst zur Laufzeit knallen zu lassen (bzw. nicht, falls es geht).

Ja, sinnvoller wäre es, wenn der Compiler einfach davon ausginge, dass es immer einen Comparer gibt und erst bei Implementation mit einem bestimmten Typ dann die Fehlermeldung kommt.
$2B or not $2B
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#7

AW: F2084 beim kompilieren in Win32

  Alt 30. Mai 2023, 23:52
Man kann den Typen T einschränken...
Wie das? Geht doch bei Delphi nicht, oder? Oder habe ich Dich missverstanden?

Meinst Du das: https://docwiki.embarcadero.com/RADS...risierte_Typen)
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: F2084 beim kompilieren in Win32

  Alt 31. Mai 2023, 00:31
Teilweise geht es, aber da sollten die schon mal noch bissl was verbessern.

Also man kann z.B. sagen dass es eine Klasse ist, bzw. es einen Constructor gibt,
womit man Dinge wie .Create benutzen kann, ohne böse casten zu müssen.



Es kommt erstmal drauf an, was für Typen du benutzen willst.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: F2084 beim kompilieren in Win32

  Alt 31. Mai 2023, 00:58
Danke für die Antwort. Wenn Du schreibst "korrekt wäre" heisst das man darf keine generische Typen auf Ungleichheit bzw. Gleichheit prüfen? Bin gerade verwirrt...
Früher ging da viel weniger. Heute sollte es an der Stelle gehen wie auch Uwe schrieb.

Aber was ich meinte ist, dass der Compiler, wenn er es irgendwo nicht können sollte, zumindest eine passende Fehlermeldung werfen muss.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#10

AW: F2084 beim kompilieren in Win32

  Alt 31. Mai 2023, 07:20
Danke für die Antwort. Wenn Du schreibst "korrekt wäre" heisst das man darf keine generische Typen auf Ungleichheit bzw. Gleichheit prüfen? Bin gerade verwirrt...
Früher ging da viel weniger. Heute sollte es an der Stelle gehen wie auch Uwe schrieb.

Aber was ich meinte ist, dass der Compiler, wenn er es irgendwo nicht können sollte, zumindest eine passende Fehlermeldung werfen muss.
Ok. Jetzt habe ich Dich verstanden .

Naja. Vergleich auf Gleicheit (oder Ungleichheit) sollte bei einfachen Typen ja immer gehen. SizeOf(T) und dann schauen ob da die gleiche Byte-Folge steht sollte ja grundsätzlich kein Problem darstellen. Wäre halt cool, wenn man bei genrics die Typen einschränken könnte. Manchmal möchte man halt Generics nur für Zahlen machen (dann könnte man auch rechnen) oder nur für Integer-Typen oder, oder, oder. Ähnlich wie c++ (type_traits).
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11: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