我必須在 Lazarus 中為學校開發一個游戲,我遇到了一個我找不到解決方案的錯誤。
我有一個動態陣列,我想在其中存盤類,以便我可以在這些類上呼叫程序。
TKarte
是祖先類,我有許多不同的類(都代表不同的卡片)與祖先類具有相同的程式。
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.
這就是我現在添加它們并從陣列中呼叫它們的方式:
Hand: array of Class of TKarte;
procedure TSplashScreen.Button2Click(Sender: TObject);
begin
SetLength(Hand,Length(Hand) 1);
Hand[High(Hand)] := Karte;
Hand[High(Hand)].OnPlay();
Hand[High(Hand)].GetPicture(Image1);
end;
運行程式沒有問題,但是當我嘗試添加一個新組件,或者我按下CTRL Space自動完成時,它在陣列宣告時給了我一個錯誤:
錯誤:不允許匿名類定義
我試圖找到這個問題的答案,但似乎沒有人遇到同樣的問題:(
有人可以幫助我嗎?
uj5u.com熱心網友回復:
順便說一句,我認為代碼沒有任何問題,正如你所說,代碼確實運行正確。只有 IDE 有問題。因此,我不建議直接在陣列的宣告中宣告陣列的元素型別。我建議在宣告陣列之前為其宣告一個別名,例如:
type
TKarte=class
...
end;
TKarteClass = Class of TKarte;
...
Hand: array of TKarteClass;
uj5u.com熱心網友回復:
您的代碼中幾乎沒有問題。
在創建某種型別的陣列時,您沒有在陣列本身中定義所述型別,而只告訴需要使用哪種型別。所以你的陣列定義是:
Hand: array of TKarte;
我還看到您已將所有程式宣告為
class procedure
.class methods
和普通有根本的區別methods
。很可能您不需要將它們宣告為class methods
基于您要實作的目標。雖然我找不到關于這個主題的合適的 Lazarus 檔案,但您可以參考 Delphi 檔案中的Class 方法,以更好地了解它們的區別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/491810.html