在delphi中定义为全局变量时,类不起作用

Den*_*nis 1 delphi class global-variables

我创建了一个简单的类来解释我的问题:

ttest =class
private
   val:boolean;
published
   function get:boolean;
end;

...

function ttest.get: boolean;
begin
   val:=not val;
   result:=val;
end;
Run Code Online (Sandbox Code Playgroud)

现在,如果我声明一个本地ttest变量并调用my_var.get; 然后一切正常,但如果我将它声明为全局变量,那么它就不能再访问val字段了,它会显示一条错误消息,上面写着"访问违规......".我在Delphi中阅读了一些关于类的文章,但仍然找不到我的错误.

Rob*_*edy 5

你忽略了实例化这个类.

全局类引用变量初始化为nil,而局部变量根本没有初始化.局部变量的值由您调用函数时堆栈上的任何内容确定,并且您的程序正在解释该值,就好像它是一个TTest引用,即使它实际上并非如此.然后,您的程序将读取该内存地址处的值,以获取表示该val字段的值.

您的代码似乎与非全局变量一起使用的唯一原因是运气.无论是好运还是坏事都是另一回事.(祝你好运,因为你的代码似乎工作正常,而且工作代码总是很好.运气不好,因为如果你的代码崩溃了,你早些时候就会被提醒你.)

在使用对它的引用之前实例化一个类.

x := TTest.Create;
Run Code Online (Sandbox Code Playgroud)

现在,您可以通过x变量访问对象的字段,方法和属性.

当您尝试使用局部变量而不首先为其赋值时,您应该收到编译器警告.虽然它们只是警告,并且您的程序仍然会运行,但永远不要忽略警告甚至提示.当编译器不愿抱怨某事时,通常是正确的.

  • "_忽略警告甚至暗示._"听到!听! (5认同)