gpt4 book ai didi

delphi - 运算符不适用于该操作数类型

转载 作者:行者123 更新时间:2023-12-03 15:22:37 25 4
gpt4 key购买 nike

我有这样的情况:

type
TWheel = record
private type
TWheelEnum = (whBA, whCA, whFI, whGE, whMI, whNA, whPA, whRM, whRN,
whTO, whVE);
var
FWheelEnum: TWheelEnum;
public
class operator Implicit(const Value: string): TWheel;
class operator Implicit(const Value: TWheel): string;
end;

与:

var
awheel, bwheel: twheel;
begin
try
awheel := 'PA';
bwheel := 'PA';
if awheel = bwheel then writeln ('pippo');
end.

当我运行时,它给我这个错误:

E2015 Operator not applicable to this operand type

我已经解决了写作:

if awheel = string(bwheel) then writeln ('pippo');

但是可以在不添加字符串(...)的情况下解决它吗?首先我想到的是:

class operator Implicit(const Value: TWheel): Twheel;

但是编译器给我一个错误,告诉我只接受一种 TWheel 类型。所以我想知道是否有解决方案,或者我是否需要使用 string(...) 的转换类型?非常感谢。

最佳答案

您需要定义一个Equal运算符:

class operator Equal(const a, b: TWheel): Boolean;

我想实现应该是:

class operator TWheel.Equal(const a, b: TWheel): Boolean;
begin
Result := a.FWheelEnum=b.FWheelEnum;
end;

您可能还想实现 NotEqual 运算符。

class operator TWheel.NotEqual(const a, b: TWheel): Boolean;
begin
Result := a.FWheelEnum<>b.FWheelEnum;//could write not (a=b) instead
end;

事实上,这些运算符的定义足以让编译器接受混合 TWheelstring 操作数的相等比较。

documentation 中提供了完整的运算符列表。偶尔读一读以重新熟悉运算符重载的可用内容是非常值得的。

关于delphi - 运算符不适用于该操作数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8270427/

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