こういうことは最初の章にやっておくべきですが、今になってしまいました。

皆さん、コンパイルする時に警告が出て気になっていたことでしょう。

1>c:\龍神録プロジェクト\15章\mydat\source\graph.cpp(7) : warning C4244:
'引数' : 'double' から 'float' への変換です。データが失われる可能性があります。

こんな警告がいくつか出てたと思います。

これはDrawRotaGraphF関数がx,y座標となる引数をfloat型でしか受け付けないのに、

double型の変数で渡している為、値が失われていますよという警告です。

放置しておいても全く問題ない警告なのですが、やはり警告は0の方がいいので、消しておきましょう。

今回関数のオーバーロードという機能を使ってこれを実現します。

特に覚えたくない人は覚えなくても結構です。知らなくても今後の製作に問題はありません。

C++の機能を使えば、関数名が同じ異なった関数を宣言する事が出来ます。

例えば

int my_calc(double a){
}


int my_calc(int a){
}

という関数は共存する事が出来ます。double型を渡せば上が呼ばれ、int型を渡せば下が呼ばれます。

ここでfloatとかを渡すと引数があいまいだとかって怒られます。

これを使ってdouble型を受け付ける同じ名前の関数を作り、きちんとキャストして普通の関数を呼ぶようにしてみましょう。


int DrawRotaGraphF( double xd, double yd, double ExRate, 
        double Angle, int GrHandle, int TransFlag, int TurnFlag = FALSE  ) {
    return DrawRotaGraphF((float)xd,(float)yd,ExRate,Angle,GrHandle,TransFlag,TurnFlag);
}
int DrawModiGraphF( double x1, double y1, double x2, double y2,
        double x3, double y3, double x4, double y4, int GrHandle, int TransFlag ){
    return DrawModiGraphF( (float)x1, (float)y1, (float)x2, (float)y2, 
        (float)x3, (float)y3, (float)x4, (float)y4, GrHandle, TransFlag ) ;
}


graph.cpp関数のインクルード文の直下にこれを書きます。するとdouble型を引数にした関数が出来たので

まずこちらが呼ばれ、キャストして関数に処理を渡す為、警告が0になります。

みにくくあれこれかいていますが、単にdoubleをfloatにキャストして呼んでいるだけです。

実は少し前の章から既に使われているので、警告が既に0だったことに気づいていらっしゃった方もいるかもしれません。

今回警告が消えただけなので、特に実行結果は変わっていません。

- Remical Soft -