为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

叮当猫咪 2019-10-21 15:22:27
我有一个非常基本和简单的类,如下所示:单元装载机;interfaceuses  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,但无法解决此错误。有人给我显示路径或对此有解决方案吗?
查看完整描述

3 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

var

  the : TLoader;

begin

  the := the.Create;

是不正确的。它应该是


var

  the : TLoader;

begin

  the := TLoader.Create;


查看完整回答
反对 回复 2019-10-21
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

您的语法有误。如果要构造一个新对象,则应在构造函数调用中使用类名而不是变量名:


procedure TForm1.Button1Click(Sender: TObject);

var

 the : TLoader;

begin

  the := TLoader.Create;

end;


查看完整回答
反对 回复 2019-10-21
?
皈依舞

TA贡献1851条经验 获得超3个赞

不,您不能这样做,@ Arioch。该ClassType函数通过从给定对象中读取类引用来工作。在您的建议中,ClassType将从一个未初始化的变量中读取数据,因为还没有有效的对象引用,这与原始问题相同。ClassType是一个实例方法,因此您需要一个实例。

查看完整回答
反对 回复 2019-10-21
  • 3 回答
  • 0 关注
  • 589 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信