Delphi Custom Enumerator gibt seltsame Fehler
-
27-10-2019 - |
Frage
Beim Erstellen eines benutzerdefinierten Enumerators für die String -Parsen sehe ich einige seltsame Fehlermeldungen. Bei der Verwendung von Datensatz ergibt der folgende Fehler:
E2010 Inkompatible Typen: 'TSPLITStringenumerator' und 'Zeiger'
Wenn Sie Klassen verwenden (ein paar .Create -Anrufe in den Code einfügen), erhalte ich von Zeit zu Zeit einige interne Fehler:
Weiß jemand, wie man die Aufzählung mit Datensätze anstelle von Klassen funktioniert?
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;
Lösung
Ich habe das ähnliche gefunden Fehlerbericht Nr. 72213 auf QC. Der Fehler wurde in Delphi 2010 behoben (siehe Auflösungskommentare).
Andere Tipps
Dieser Code kompiliert und scheint für mich in Delphi 2010 erfolgreich auszuführen. Die Ausgabe lautet:
Debug Output: A Process Project4.exe (4656)
Debug Output: B Process Project4.exe (4656)
Debug Output: C Process Project4.exe (4656)
Ist es möglich, dass Aufzähler mit Aufzeichnungen in Delphi 2007 nicht unterstützt werden?