こういうことは最初の章にやっておくべきですが、今になってしまいました。
皆さん、コンパイルする時に警告が出て気になっていたことでしょう。
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 -