我有一个非常基本和简单的类,如下所示:单元装载机;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;
小唯快跑啊
TA贡献1863条经验 获得超2个赞
您的语法有误。如果要构造一个新对象,则应在构造函数调用中使用类名而不是变量名:
procedure TForm1.Button1Click(Sender: TObject);
var
the : TLoader;
begin
the := TLoader.Create;
end;
皈依舞
TA贡献1851条经验 获得超3个赞
不,您不能这样做,@ Arioch。该ClassType
函数通过从给定对象中读取类引用来工作。在您的建议中,ClassType
将从一个未初始化的变量中读取数据,因为还没有有效的对象引用,这与原始问题相同。ClassType
是一个实例方法,因此您需要一个实例。
添加回答
举报
0/150
提交
取消