gpt4 book ai didi

delphi - 无法访问的字段错误

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

有时,当我编写一个类然后对其进行测试时,我在底部的图片中得到了错误,并且当我尝试对其进行调试时,编辑器向我显示了我要访问的属性是“不可访问的值”(在构造函数效果惊人)。

上次遇到此问题时,我只是通过将代码复制到新的单元中并删除旧的单元来解决此问题,因此我认为它与预编译的.dcu文件有关。但是不幸的是,这个棘手的解决方案不适用于该类,我做错了还是这是由于Delphi 7过时(我在Win8上工作)引起的?

unit UVector;

interface

uses

SysUtils, Types;

type

Vector2f = class

private

x : extended;
y : extended;

public

function getX() : extended;
function getY() : extended;
constructor create(x,y : extended);
procedure add(v : Vector2f);


end;


implementation

constructor Vector2f.create(x,y : extended); // works!
begin
self.x := x;
self.y := y;
end;

procedure Vector2f.add(v : Vector2f);
begin
//inc(x, v.getX()); // compiler error : left side cannot be assigned to
//inc(y, v.gety()); // compiler error : left side cannot be assigned to
self.x := self.x + v.getX(); //inaccessible value (at runtime) for x and getX()
self.y := self.y + v.getY(); //inaccessible value (at runtime) for y and getY()
end;

function Vector2f.getX() : extended;
begin
result := x;
end;

function Vector2f.getY() : extended;
begin
result := y;
end;


end.

最佳答案

首先,从help on the Inc routine出发,为什么Inc不起作用:


X是序数类型的变量(包括Int64)... X是一个序数类型的变量。


Extended不是序数类型,而是实数类型。



其次,为什么会出现访问冲突? AV,尤其是当读取地址接近零时,很有可能您正在访问未分配的对象变量,这也会导致无法访问的值调试器提示。

此测试代码有效:

procedure TForm1.Button1Click(Sender: TObject);
var
V1: Vector2f;
V2: Vector2f;
begin
V1 := Vector2f.create(123.45, 234.56);
V2 := Vector2f.create(123.45, 234.56);
try
V1.add(V2);
Caption := FloatToStr(V1.getX); // Outputs 246.9
finally
V2.Free;
V1.Free;
end;
end;


因此,迫在眉睫的原因之一是:


您尚未创建要处理的对象,
您尚未创建要传递的对象。

关于delphi - 无法访问的字段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16639832/

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