gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 19:00:42 32 4
gpt4 key购买 nike

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

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

...

function ttest.get: boolean;
begin
val:=not val;
result:=val;
end;

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

最佳答案

您忽略了实例化该类。

全局类引用变量初始化为 nil ,而局部变量根本没有初始化。局部变量的值由调用函数时堆栈中发生的任何内容确定,并且您的程序将该值解释为 TTest引用即使它真的不是。然后,您的程序读取该内存地址处的值以获取表示 val 的值。 field 。

您的代码似乎可以使用非全局变量的唯一原因是运气。是好是坏是另外一回事。 (祝你好运,因为你的代码似乎可以工作,而且工作代码总是很好。运气不好,因为如果你的代码崩溃了,你会更早地被警告你的错误。)

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

x := TTest.Create;

现在您可以通过 x 访问对象的字段、方法和属性。多变的。

当您尝试使用局部变量而不首先为其赋值时,您应该得到编译器警告。尽管它们只是警告,并且您的程序仍将运行,但永远不要忽略警告甚至提示。当编译器费心提示某事时,通常是对的。

关于delphi - 在delphi中定义为全局变量时类不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9284109/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com