第三十七章 把警告给消除了吧

>>点此回到教程目录

这一章要说的话本应该在第一章就说明的,不过还是拖到了现在。

编译的时候估计大家已经注意到编译器的警告了吧。

可能会出现这样子的警告:

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了。

这次我们只是把警告消除了,因此运行结果并没有改变。

>>点此回到教程目录

results matching ""

    No results matching ""