Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Compiler Fehler NC338 bei Generics (https://www.delphipraxis.net/212484-compiler-fehler-nc338-bei-generics.html)

backdraft 16. Feb 2023 13:17

Compiler Fehler NC338 bei Generics
 
Hallo zusammen,

gibt es eigentlich irgendwas, was man gegen den internen Compilerfehler NC338 machen kann?
Er kommt bei mir ständig, wenn ich inline Variablen verwende, ohne den Typ zu definieren.
Wann genau es passiert kann ich gar nicht sagen, es hilft auf jeden Fall immer, wenn ich den Typ dann definiere:
Code:
var x: TMyRecord<Boolean> := MyFunc();
Es hat auch immer was mit Records und Generics zu tun, die als Rückgabewert genutzt werden.

Manchmal hilft es schon, wenn ich die Unit einbinde, oft aber nicht.
Meistens klappt der Code auch erstmal lange, irgendwann geht es nicht mehr und ich muss an einigen Stellen (aber nicht an allen) den Variablentyp definieren.
Ein Muster hab ich noch nicht erkannt.
Es scheint aber zu gehen, wenn ich den Rückgabewert schonmal irgendwo "über" der Quellcode Zeile definiert habe. Muss aber nicht in der Funktion sein.
Mit kommt es so vor, als wenn er den Typ einfach noch nicht kennt. Ist aber oft nur bei komplexeren Rückgabetypen so. Einfache gehen in der Regel.

Mittlerweile kann ich den Code auch oft in Delphi kompilieren, aber dann nicht mit MSBuild über FinalBuilder.
Gleiches Problem kommt aber, wenn ich in den Delphi Optionen aktiviere, dass er mit externem MSBuild arbeiten soll. Dann schägt es genauso fehlt wie mit Finalbuilder.
Somit scheint Delphi es manchmal besser zu machen.

Delphi selbst meldet immer: "F2084 Interner Fehler: NC338".

Muss ich hierfür ein Ticket bei Emba aufmachen, oder hat jemand einen Tipp?

LG
Oliver

himitsu 16. Feb 2023 14:20

AW: Compiler Fehler NC338 bei Generics
 
Zitat:

Zitat von backdraft (Beitrag 1518758)
Muss ich hierfür ein Ticket bei Emba aufmachen, oder hat jemand einen Tipp?

Ja, es sei denn das wurde schon gemeldet.

So?
Delphi-Quellcode:
var x := MyFunc();

[edit] achso, falschrum verstanden.
Joar, dann mal siehe Nachfolgend ausprobieren.

uligerhardt 16. Feb 2023 14:34

AW: Compiler Fehler NC338 bei Generics
 
Schuss ins Blaue: Vielleicht hilft's, den Rückgabetyp von MyFunc explizit zu machen?
Delphi-Quellcode:
type
  TMyBooleanRecord = TMyRecord<Boolean>;
function MyFunc: TMyBooleanRecord;
statt
Delphi-Quellcode:
function MyFunc: TMyRecord<Boolean>;

backdraft 16. Feb 2023 15:07

AW: Compiler Fehler NC338 bei Generics
 
Zitat:

Zitat von uligerhardt (Beitrag 1518774)
Schuss ins Blaue: Vielleicht hilft's, den Rückgabetyp von MyFunc explizit zu machen?
Delphi-Quellcode:
type
  TMyBooleanRecord = TMyRecord<Boolean>;
function MyFunc: TMyBooleanRecord;
statt
Delphi-Quellcode:
function MyFunc: TMyRecord<Boolean>;

Hab ich gerade probiert geht nicht. Hatte ich meine ich auch schon mal probiert. Aber gute Idee, danke fürs mitdenken :-)

Ich hab überall mal nach NC338 gesucht, aber finde nix wirklich.
Das Problem habe ich schon seitdem ich inline Vars benutze.

Hat es sonst noch nie jemand gehabt?

backdraft 16. Feb 2023 15:15

AW: Compiler Fehler NC338 bei Generics
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hab ne Demo gemacht.
Es ist immer z.B. dann wenn das Result in einer anderen Unit ist als die Funktion und das Result als Generic definiert ist.

Klaus01 16. Feb 2023 15:24

AW: Compiler Fehler NC338 bei Generics
 
mit der letzen Beta Version kann ich Deinen Fehler nicht nachstellen.
Auch nicht wenn mit MSBuild kompiliert wird.

Mit der Version 11.2 ist der Fehler nachstellbar wenn MSBuild genutzt wird.

Grüße
Klaus

backdraft 16. Feb 2023 15:30

AW: Compiler Fehler NC338 bei Generics
 
Zitat:

Zitat von Klaus01 (Beitrag 1518783)
mit der letzen Beta Version kann ich Deinen Fehler nicht nachstellen.
Auch nicht wenn mit MSBuild kompiliert wird.

Mit der Version 11.2 ist der Fehler nachstellbar wenn MSBuild genutzt wird.

Grüße
Klaus

Das wäre natürlich super.
Ich habe die letzte 10.4 und 11.2 probiert. Da geht es leider nicht.

jaenicke 16. Feb 2023 15:43

AW: Compiler Fehler NC338 bei Generics
 
Wobei ich persönlich sehr von Type Inference abrate. Wenn man dann den Rückgabewert ändert, ändert sich automatisch der Variablentyp. Im günstigsten Fall bekommt man dann irgendwo später bei Verwendung der Variable einen Kompilierfehler und wenn man Glück hat, erkennt man auch schnell woran das liegt. Wenn man Pech hat, funktioniert der Quelltext trotzdem weiter und tut nur nicht mehr das, was er soll.

Deshalb würde ich immer den Typ einer Variable bei deren Deklaration angeben.


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