首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为什么会报如上的类型转换警告

2012-09-09 
为什么会报如下的类型转换警告?编译下面一段代码:C/C++ code#includeiostreamusing namespace std//声

为什么会报如下的类型转换警告?
编译下面一段代码:

C/C++ code
    #include<iostream>using namespace std;//声明类Pointclass Point{public:Point(float x=0,float y=0);void setPoint(float,float);float getX() const{return x;}float getY() const{return y;}friend ostream & operator<<(ostream &,const Point &);protected:    float x,y;};//下面定义Point类的成员函数//Point的构造函数Point::Point(float a,float b){x=a;y=b;}//设置x和y的坐标值void Point::setPoint(float a,float b){x=a;y=b;}//重载运算符“<<”,使之能输出点的坐标ostream & operator<<(ostream &output,const Point &p){output<<"["<<p.x<<","<<p.y<<"]"<<endl;return output;}int main(){Point p(3.5,6.4);//[color=#FF0000]warning C4305: “参数”: 从“double”到“float”截断[/color]cout<<"x="<<p.getX()<<","<<"y="<<p.getY()<<endl;p.setPoint(8.5,6.8);//[color=#FF0000]warning C4305: “参数”: 从“double”到“float”截断[/color]cout<<"p(new):"<<p<<endl;}

编译完成后报如下的警告:
warning C4305: “参数”: 从“double”到“float”截断,如程序中所示位置,之前我并没有声明任何数据位double型,为什么这里会有这样一个警告呢?请大家帮忙给看一下,谢谢

[解决办法]
String literal也是有类型的。对于浮点型的常量,如果只有浮点数字本身,则为double类型。因此3.5是double型。如果需要float型的3.5,需要使用后缀f,即3.5f。同样还有整型后缀:U代表无符号,L代表long,等等……
[解决办法]
像3.5、6.4这样的浮点常量的类型是double。
[解决办法]
3.5的类型是double,浮点数字面量的默认类型是double。如果要指定是float则是3.5f
[解决办法]
C/C++ code
        Point p(3.5f,6.4f); //加上f    p.setPoint(8.5f,6.8f); //加上f    return 0; //加上返回值
[解决办法]
探讨

3.5的类型是double,浮点数字面量的默认类型是double。如果要指定是float则是3.5f

热点排行