4

1 次元配列を簡単に処理/返すための 2 つの arapper 型があり、それらを別の配列 (2d-float-Vector クラスから 2d-int-point クラス) に変換するメソッドを作成したいと考えています。簡単なものを書きましたが、理解できないエラーが発生するだけです。

unit UUtil;

interface

uses

    UVector2f, Types, SysUtils;

type

    Vector2fArrayWrapper = array of Vector2f;
    PointArrayWrapper = array of TPoint;

implementation

    function toPointArray(vw : Vector2fArrayWrapper) : PointArrayWrapper;
    var pw : PointArrayWrapper;
        i,x,y : Integer;
    begin
        setLength(pw, vw.length);
        for i := 0 to vw.high do
        begin
            x := round(vw[i].getX());
            y := round(vw[i].getY());
            vw[i] := TPoint(x,y);
        end;
        result := pw;
    end;


end.

これらは私が得るエラーです:

[Error] UUtil.pas(20): Record, object or class type required
[Error] UUtil.pas(21): Record, object or class type required
[Error] UUtil.pas(25): ')' expected but ',' found
[Error] UUtil.pas(27): Declaration expected but identifier 'result' found
[Error] UUtil.pas(28): '.' expected but ';' found
4

1 に答える 1

6

動的配列は、オブジェクト、クラス、またはレコードではありません。それらにはメソッドが定義されていません。

それ以外の

vw.length

あなたは書く必要があります

Length(vw)

についても同様ですhigh

TPointはタイプです。新しいものを作りたい場合は、ヘルパー関数を使用しますPoint()

次に、に割り当てvw[i]ますが、確かにに割り当てることを意味しますpw[i]

最後に、ローカル変数を導入してResultそのローカル変数を割り当てる必要はありません。すべての作業を で直接行うことができますResult。したがって、次のようなコードを記述します。

function toPointArray(const vw: Vector2fArrayWrapper): PointArrayWrapper;
var 
  i: Integer;
begin
  setLength( Result, Length(vw));
  for i := 0 to high(vw) do
    Result[i] := Point(round(vw[i].getX), round(vw[i].getY));
end;
于 2013-05-18T21:03:28.657 に答える