的当な場所が見つからなかったため、ここに投稿します。
よろしくお願いします。
0-360度を定義する高度なレコード型を作っています。
/// <summary>0-360度 角度</summary> TDegree = record private FValue: Double; public class operator Implicit(Deg: Double): TDegree; overload; // class operator Implicit(Deg: TDegree): Double; overload; // class operator Implicit(Deg: TDegree): Extended; overload; class operator Implicit(Deg: TDegree): Real; overload; // class procedure DegToDMS(Deg: TDegree; var D, M, S, mS: WORD); static; end;
こんな感じです。
で、度を度分秒に分解したいとこんなのを定義
class procedure TDegree.DegToDMS(Deg: TDegree; var D, M, S, mS: WORD); var v: Double; begin D := Trunc( Deg ); // 整数部は度 v := Frac( Deg ); // 少数部を取り出して分秒の算出準備 end;
しかし、
D := Trunc( Deg );
にて
E2015:この型には指定した演算子は使えません。
が出ます。
ここをコメントアウトすると、コンパイルは通ります。
と言う事は、Frac( Deg ); はOK。
D := Trunc( Deg.FValue );
とすると、通ります。
私の考えるに
Implicit(Deg: TDegree): Double;
が呼ばれて、
Trunc( Deg { DegがDoubleに変換される } )
こうなるのかと思っているわけですけど。
Frac( Deg ); がOKなのに、なぜ、Trunc( Deg ); がダメなのかがわかりません。
何か、私が見落としている所有りますでしょうか。
よろしくお願いいたします。
|