gpt4 book ai didi

Delphi 自定义枚举器出现奇怪的错误

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

创建用于字符串解析的自定义枚举器时,我看到一些奇怪的错误消息。使用record时出现以下错误:

E2010 Incompatible types: 'TSplitStringEnumerator' and 'Pointer'

当使用类(在代码中插入一些 .Create 调用)而不是记录时,我时不时会收到一些内部错误:

有谁知道如何使用记录数据类型而不是类来保持枚举工作?

type
TSplitStringEnumerator = record
StringToParse: string;
Separator: Char;
S: Integer;
E: Integer;
L: Integer;
function GetCurrent (): string; inline;
function MoveNext (): Boolean; inline;
property Current: string read GetCurrent;
end;

TSplitStringGenerator = record
Enum: TSplitStringEnumerator;
function GetEnumerator: TSplitStringEnumerator; inline;
end;

function SplitString( const StringToParse: string; Separator: Char ): TSplitStringGenerator; //inline;
begin
Result.Enum.StringToParse := StringToParse;
Result.Enum.Separator := Separator;
Result.Enum.S := 0;
Result.Enum.E := 0;
Result.Enum.L := Length( StringToParse );
end;

procedure Test();
var
S: string;
begin
for S in SplitString( 'A;B;C', ';' ) do begin
OutputDebugString( PChar( S ) );
end;
end;

{ TSplitStringGenerator }

function TSplitStringGenerator.GetEnumerator(): TSplitStringEnumerator;
begin
Result := Enum;
end;

{ TSplitStringEnumerator }

function TSplitStringEnumerator.GetCurrent(): string;
begin
Result := Copy( StringToParse, S, E - S );
end;

function TSplitStringEnumerator.MoveNext(): Boolean;
begin
S := E + 1;
Result := S <= L;
E := S;
while ( E <= L ) and ( StringToParse[ E ] <> Separator ) do Inc( E );
end;

最佳答案

我找到了类似的bug report #72213关于质量控制。该错误已在 Delphi 2010 中修复(请参阅解决方案注释)。

关于Delphi 自定义枚举器出现奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4838256/

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