Delphi:Create()构造函数结尾处的访问冲突

我有一个非常基本和简单的类,如下所示:


单元装载机;


interface


uses

  Vcl.Dialogs;


type

  TLoader = Class(TObject)

  published

      constructor Create();

  end;


implementation


{ TLoader }    

constructor TLoader.Create;

begin

   ShowMessage('ok');


end;


end.

从Form1中我这样称呼它:


procedure TForm1.Button1Click(Sender: TObject);

var

 the : TLoader;

begin

  the := the.Create;

end;

现在,在the := the.Create零件之后,delphi会显示消息,'ok'然后给我一个错误,然后说Project Project1.exe raised exception class $C0000005 with message 'access violation at 0x0040559d: read of address 0xffffffe4'.


它还显示此行:


constructor TLoader.Create;

begin

   ShowMessage('ok');


end; // <-------- THIS LINE IS MARKED AFTER THE ERROR.

我是delphi的新手。我正在使用Delphi XE2,但无法解决此错误。有人给我显示路径或对此有解决方案吗?


叮当猫咪
浏览 601回答 3
3回答

当年话下

var&nbsp; the : TLoader;begin&nbsp; the := the.Create;是不正确的。它应该是var&nbsp; the : TLoader;begin&nbsp; the := TLoader.Create;

小唯快跑啊

您的语法有误。如果要构造一个新对象,则应在构造函数调用中使用类名而不是变量名:procedure TForm1.Button1Click(Sender: TObject);var&nbsp;the : TLoader;begin&nbsp; the := TLoader.Create;end;

皈依舞

不,您不能这样做,@ Arioch。该ClassType函数通过从给定对象中读取类引用来工作。在您的建议中,ClassType将从一个未初始化的变量中读取数据,因为还没有有效的对象引用,这与原始问题相同。ClassType是一个实例方法,因此您需要一个实例。
打开App,查看更多内容
随时随地看视频慕课网APP