我必须在拉撒路开发一个游戏,我遇到了一个错误,我不能找到一个解决方案。
我有一个动态数组,我想在其中存储类,以便我可以调用这些类上的过程。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 +空格键进行自动完成时,它在数组声明处给我一个错误:
错误:不允许匿名类定义
英译汉我试着找到这个问题的答案,但似乎没有人有同样的问题
有人能帮帮我吗?
2条答案
按热度按时间sg24os4d1#
我发现代码没有任何问题,正如你所说的,代码运行正常。只是IDE有问题。因此,我不建议直接在数组声明中声明数组的元素类型。我建议在声明数组之前为它声明一个别名,例如:
第一个
ut6juiuv2#
您的代码中几乎没有问题。
1.当创建某个类型的数组时,你并没有在数组本身中定义该类型,而只是告诉你需要使用哪种类型。因此,你的数组定义应该是:
Hand: array of TKarte;
1.我还看到您已经将所有过程声明为
class procedure
。class methods
和普通的methods
之间有一个根本的区别。根据您试图实现的目标,您很可能不需要将它们声明为class methods
。虽然我找不到合适的Lazarus文档关于这个主题,你可以参考 Delphi 文档的类方法,以获得更好的理解他们的差异。