gpt4 book ai didi

delphi - 用数组重载运算符

转载 作者:行者123 更新时间:2023-12-03 15:47:04 27 4
gpt4 key购买 nike

我有这个单位:

unit Main.TIns;

interface

type
TIns = record
private type
TInsArray = array [0..90] of Integer;
var
FInsArray: TInsArray;
public
class operator Implicit(const Value: Integer): TIns;
class operator Add(const Elem1: TIns; const Elem2: Integer): TIns;
end;

implementation

class operator TIns.Implicit(const Value: Integer): TIns;
var
iIndex: Integer;
begin
if Value = 0 then
for iIndex := 0 to 90 do Result.FInsArray[iIndex] := 0;
end;

class operator TIns.Add(const Elem1: TIns; const Elem2: Integer): TIns;
begin
Inc(Result.FInsArray[0]);
Result.FInsArray[Result.FInsArray[0]] := Elem2;
end;

end.

主程序是:

program InsMain;

{$APPTYPE CONSOLE}

{$R *.res}

uses
System.SysUtils,
Main.TIns in 'Main.TIns.pas';

var
s: TIns;
begin
s := 0; // Initialize ins; similar t := [] //
s := s + 5; // Add a element, in this case 5 //
writeln(s[0]); // Read number of element in s, should to be 1 //
end.

问题是我收到此错误:[DCC 错误] InsMain.dpr(20): E2149 类没有默认属性。为什么我无法读取数组元素?我想过解决添加变量 MyVal 的问题,例如这样做:

 type
TIns = record
private type
TInsArray = array [0..90] of Integer;
var
FInsArray: TInsArray;
public
MyVal: TInsArray;
class operator Implicit(const Value: Integer): TIns;
class operator Add(const Elem1: TIns; const Elem2: Integer): TIns;
end;

然后我修改添加这样:​​

class operator TIns.Add(const Elem1: TIns; const Elem2: Integer): TIns;
begin
Inc(Result.FInsArray[0]);
Result.FInsArray[Result.FInsArray[0]] := Elem2;
MyVal := Result; // <--- error E2124 here.
end;

并写作:

writeln(s.MyVal[0]); 

不返回错误,但在添加时给出错误,写入:[DCC Error] Main.TIns.pas(31): E2124 Instance member 'MyVal' inaccessible here,所以不明白我的错误在哪里.

最佳答案

在 TExtracts.Add 中,您永远不会使用 Elem1 的内容初始化结果。这就是为什么你总是以空结果结束。

更新:您的更改弊大于利!现在您正在写入类方法内的记录字段。这是不可能的,因为错误消息试图澄清。更不用说我不知道​​ MyVal 有什么用处。

关于delphi - 用数组重载运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8419266/

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