delphi 拉撒路错误:不允许匿名类定义

t2a7ltrp  于 2022-11-23  发布在  其他
关注(0)|答案(2)|浏览(141)

我必须在拉撒路开发一个游戏,我遇到了一个错误,我不能找到一个解决方案。
我有一个动态数组,我想在其中存储类,以便我可以调用这些类上的过程。
TKarte是祖先类,我有许多不同的类(都表示不同的Cards),它们具有与祖先类相同的过程。

unit Karten;

{$mode ObjFPC}{$H+}

interface

uses
  Classes, SysUtils, Dialogs, ExtCtrls;

type
  TKarte=class
    public
      class procedure GetPicture(Objekt:TImage);virtual;
      class procedure OnPlay;virtual;
  end;

type
  Karte = class(TKarte)
    public
      class procedure GetPicture(Objekt:TImage);override;
      class procedure OnPlay;override;
end;

type
  Karte2 = class(TKarte)
    public
      class procedure GetPicture(Objekt:TImage);override;
      class procedure OnPlay;override;
  end;

implementation

class procedure Karte.OnPlay();
begin
  ShowMessage(ClassName);
end;

class procedure Karte.GetPicture(Objekt:Timage);
begin
  Objekt.Picture.LoadFromFile('Grafiken\Karten\Mindcontrol.png');
end;

class procedure Karte2.GetPicture(Objekt:Timage);
begin
  Objekt.Picture.LoadFromFile('Grafiken\Karten\Mindcontrol.png');
end;

class procedure Karte2.OnPlay();
begin
  ShowMessage(Karte2.ClassName);
end;

class procedure TKarte.OnPlay();
begin
  ShowMessage(ClassName);
end;

class procedure TKarte.GetPicture(Objekt:TImage);
begin
  Objekt.Picture.LoadFromFile('Grafiken\Sprites\Buttons\Button 1.png');
end;

end.

这就是我如何添加它们并在此刻从数组中调用它们:
第一次
运行该程序没有问题,但当我尝试添加新组件时,或者当我按CTRL +空格键进行自动完成时,它在数组声明处给我一个错误:
错误:不允许匿名类定义
英译汉我试着找到这个问题的答案,但似乎没有人有同样的问题
有人能帮帮我吗?

sg24os4d

sg24os4d1#

我发现代码没有任何问题,正如你所说的,代码运行正常。只是IDE有问题。因此,我不建议直接在数组声明中声明数组的元素类型。我建议在声明数组之前为它声明一个别名,例如:
第一个

ut6juiuv

ut6juiuv2#

您的代码中几乎没有问题。
1.当创建某个类型的数组时,你并没有在数组本身中定义该类型,而只是告诉你需要使用哪种类型。因此,你的数组定义应该是:
Hand: array of TKarte;
1.我还看到您已经将所有过程声明为class procedureclass methods和普通的methods之间有一个根本的区别。根据您试图实现的目标,您很可能不需要将它们声明为class methods。虽然我找不到合适的Lazarus文档关于这个主题,你可以参考 Delphi 文档的类方法,以获得更好的理解他们的差异。

相关问题