質問

文字列解析用のカスタム列挙器を作成するとき、いくつかの奇妙なエラーメッセージが表示されます。レコードを使用する場合、次のエラーが発生します。

e2010互換性のないタイプ:「tsplitstringenumerator」と「ポインター」

レコードの代わりにクラスを使用する場合(コードにいくつかの.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;
役に立ちましたか?

解決

同様のことを見つけました バグレポート#72213 QCで。バグはDelphi 2010で修正されました(解決策を参照)。

他のヒント

そのコードはコンパイルされ、2010年のDelphiで私にとって正常に実行されるように見えます。出力は次のとおりです。

Debug Output: A Process Project4.exe (4656)
Debug Output: B Process Project4.exe (4656)
Debug Output: C Process Project4.exe (4656)

レコード付きの列挙者がDelphi 2007でサポートされていない可能性はありますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top