Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi:Create()构造函数末尾的访问冲突_Delphi_Delphi Xe2 - Fatal编程技术网

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

Delphi:Create()构造函数末尾的访问冲突,delphi,delphi-xe2,Delphi,Delphi Xe2,我有一个非常基本和简单的类,如下所示: procedure TForm1.Button1Click(Sender: TObject); var the : TLoader; begin the := the.Create; end; 单元装载机 interface uses Vcl.Dialogs; type TLoader = Class(TObject) published constructor Create(); end; implementat

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

procedure TForm1.Button1Click(Sender: TObject);
var
 the : TLoader;
begin
  the := the.Create;
end;
单元装载机

interface

uses
  Vcl.Dialogs;

type
  TLoader = Class(TObject)
  published
      constructor Create();
  end;

implementation

{ TLoader }    
constructor TLoader.Create;
begin
   ShowMessage('ok');

end;

end.
从表格1我这样称呼它:

procedure TForm1.Button1Click(Sender: TObject);
var
 the : TLoader;
begin
  the := the.Create;
end;
现在,就在:=the.Create部分之后,delphi显示带有“ok”的消息,然后给我一个错误,并说Project Project1.exe引发了异常类$C0000005,消息为“0x0040559d处的访问冲突:读取地址0xFFFFFF4”

它还显示了这一行:

constructor TLoader.Create;
begin
   ShowMessage('ok');

end; // <-------- THIS LINE IS MARKED AFTER THE ERROR.
我是德尔福的新手。我正在使用Delphi XE2,无法修复此错误。有没有人告诉我一条路或者有解决方法

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

var
  the : TLoader;
begin
  the := TLoader.Create;

你的语法错了。如果要构造新对象,则应在构造函数调用中使用类名,而不是变量名:

procedure TForm1.Button1Click(Sender: TObject);
var
 the : TLoader;
begin
  the := TLoader.Create;
end;

我应该睡几个小时:我怎么会错过这一点!谢谢你,问题解决了!谢谢:@xangr-别担心。这是德尔福经典。我已经记不清做过多少次了。您应该使用.ClassType.Create;:-马丁:我相信你应该打电话给我;也很烦人,但这会让你在未来的both Delphi RTL内核重构和你自己的代码中更加自我。不,你不能这么做,@Arioch。ClassType函数通过从给定对象读取类引用来工作。在您的建议中,ClassType将从未初始化的变量读取,因为还没有有效的对象引用,这与原始问题面临的问题相同。ClassType是一个实例方法,所以你需要一个实例。你在说什么,@Arioch?虚拟构造函数与此无关。在C++的Builder中,CasStpe函数与Delphi中的函数相同;在未初始化的变量中,表达式-> ClassType在C++中与在Delphi中一样错误。在C++中,你认为这是一个捷径?C++不会让你直接调用任何类型的返回器的构造函数;不起作用的代码不是捷径。我不知道var instance:TLoader应该做什么。您确定需要该全局变量吗?您似乎打算声明本地TLoader变量。问题不是如何声明类。这是德尔福抛出的一个例外,我没有意识到这是因为错误的声明@我的评论并不是针对你的。这是一个明显的重复。我肯定我已经回答过不止一次了。我相信安德烈亚斯和梅森也有。但我不能很快找到一个问题来说明这一点。“堆栈溢出搜索并不是很好,但我怀疑这是一个非常困难的问题。很难找到这个问题的重复项,@David,因为很难笼统地问这个问题。”。我们已经看到了许多潜在问题的实例,但每次都会以“调试我的代码”问题的形式出现,因为这是从一个还不知道问题出在哪里的人的角度来表达问题的唯一方法。Xangr,编译器没有警告您使用了未初始化的变量吗?