第三十七章 把警告给消除了吧
这一章要说的话本应该在第一章就说明的,不过还是拖到了现在。
编译的时候估计大家已经注意到编译器的警告了吧。
可能会出现这样子的警告:
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函数的include语句正下方这样子写。由于这样一来就写好了接受double型参数的函数了,首先这边调用,然后转换参数类型进行处理过程的传递,使得警告变为0了。
虽然在一些地方写了一些东西看起来并不好看,其实就是单纯地将double转换为float类型然后调用函数仅此而已。
事实上在稍微前几章中就这样做了,因此可能会有读者已经注意到警告已经是0了。
这次我们只是把警告消除了,因此运行结果并没有改变。