Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Interner Fehler: C1264 (https://www.delphipraxis.net/177794-interner-fehler-c1264.html)

Bjoerk 27. Nov 2013 20:58

Interner Fehler: C1264
 
Ich hab einem Record ein Event spendieren wollen. Da bekomme ich jetzt plötzlich folgenden Fehler ***:

[DCC Fehler] uMaterial.pas(343): F2084 Interner Fehler: C1264
Was kann man denn da machen (Ich hab von "früher" halt viele Records)?

Delphi-Quellcode:
  TMaterialItemChanged = procedure of object;

  TMaterialItem = record // Methoden nicht für property TMaterial Items;
  private
    FE: double;
    FG: double;
    FGM: double;
    FAlphaT: double;
    FFyk: double;
    FName: string;
    FOnMaterialItemChanged: TMaterialItemChanged;
    function GetGM(Querdehnzahl: double): double;
    procedure SetGM(const Value: double);
  public
    procedure Clear;
    procedure Assign(const Value: TMaterialOldItem);
    procedure LoadUserMatFromFile(Index: TMaterialType);
    procedure SaveUserMatToFile(Index: TMaterialType);
    property E: double read FE write FE;
    property G: double read FG write FG;
    property GM: double read FGM write SetGM;
    property AlphaT: double read FAlphaT write FAlphaT;
    property Fyk: double read FFyk write FFyk;
    property Name: string read FName write FName;
    property OnMaterialItemChanged: TMaterialItemChanged
      read FOnMaterialItemChanged write FOnMaterialItemChanged;
  end;

  TMaterial = record
  private
    FItems: array [TMaterialType] of TMaterialItem;
    function GetItem(Index: TMaterialType): TMaterialItem;
    function GetItemNmm2(Index: TMaterialType): TMaterialItem;
    procedure Clear;
    procedure MaterialItemChanged;
    function GetArt(Index: TMaterialType): string;
  public
    procedure Init(Querdehnzahl: double = 0);
    function IndexOf(const Value: string): TMaterialType;
    property Art[Index: TMaterialType]: string read GetArt;
    property Items[Index: TMaterialType]: TMaterialItem read GetItem; default; // kN/m2;
    property ItemsNmm2[Index: TMaterialType]: TMaterialItem read GetItemNmm2;
  end;


procedure TMaterial.Clear;
var
  I: TMaterialType;
begin
  for I := mt_None to mt_BSt550B do
  begin
    FItems[I].Clear;
    FItems[I].OnMaterialItemChanged := MaterialItemChanged;
  end;
end; // ***

Morphie 27. Nov 2013 21:04

AW: Interner Fehler: C1264
 
Und wieso keine Klasse?

mjustin 27. Nov 2013 21:27

AW: Interner Fehler: C1264
 
Zitat:

Zitat von Bjoerk (Beitrag 1237687)
[DCC Fehler] uMaterial.pas(343): F2084 Interner Fehler: C1264

uMaterial.pas(343) bedeutet, dass der Fehler in Unit uMaterial Zeile 343 auftrat. Was steht denn in Zeile 343?

Bjoerk 27. Nov 2013 21:40

AW: Interner Fehler: C1264
 
Dieses end; ***

himitsu 27. Nov 2013 21:50

AW: Interner Fehler: C1264
 
Zitat:

Zitat von Bjoerk (Beitrag 1237687)
Was kann man denn da machen?

Dich an den Support wenden und hoffen die behenben den "Bug",
oder vielleicht gibt es schon ein Update (sind denn alle Eingespiel, bzw. geht es, wenn du ein Update weglässt?) oder ein Hotfix dafür.

Denn da es sich hier um einen "Fehler" im Compiler handelt, kannst du da garnichts machen,
außer den Code umzubauen.

Manchmal reicht es aber schon aus, wenn man in dem Code davor eine Variable/Konstante/Type umbenennt, ein Leerzeichen/Leerzeile in den Code reinmacht,
die Reihenvolge der Funktionen, bzw. deren Deklarationen verändert, damit der Compiler die fehlerhafte Stelle (in seinem eigenen Programmcode) nicht trifft und es urplötzlich wieder funktioniert.

Bjoerk 27. Nov 2013 22:15

AW: Interner Fehler: C1264
 
OK. Dann lass ich das Event doch lieber weg und übergeb' ggf. die ganze Liste statt nur eines Items.

uligerhardt 27. Nov 2013 22:40

AW: Interner Fehler: C1264
 
Du kannst statt record object nehmen:
Delphi-Quellcode:
TMaterialItem = object
  ...
Dann müsste das mit dem Event gehen.

BUG 28. Nov 2013 01:44

AW: Interner Fehler: C1264
 
Das könnte imho diesem Fehler entsprechen: QC59807; vielleicht funktioniert der angegebene Workaround :gruebel:


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