新年快乐。
程序报什么错?
你把inline float square(float i){return i*i;}改为inline double square(float i){return i*i;}试试。不知行不行,我也只是记得在哪里看到过,好像类似两个float之积应该相当于double。就是精度应该上升一级。不知是不是这个原因。
我也是很久以前好像在哪里偶尔看到过的,不知对不对。

解决方案 »

  1.   

    依然报错误
    error C2668: 'square' : ambiguous call to overloaded function
    Error executing cl.exe.
      

  2.   

    回去帮你看一下,C++是如何重载cout的
      

  3.   

    float在表达式中作为double看,像CalHua说的那样
      

  4.   

    我想,这是跟编译器有关的了,这段代码拿到Broland的编译器上可以就可以通过了。
    在VC,7.5被认为是double类型的了(64位),当你调用square时,就有这个过程:
    double->float(32位)这时VC编译器进得类型检查,正是由于VC的类型安全机制,转换过程报告内存溢出(因为高32位不见了(即使全为0))。注意,在调用函数时,C语言是不允许形参和实参的长度不一样!
    你可以这样:
    cout<<square((float)7.5)<<endl<<"\n";
    先进得强制类型转换就可以通过了!
      

  5.   

    谢谢大家的回答 ,希望常联系 
    岂能尽如人意,但求无愧我心,很高兴认识大家!
    QQ:341157
    E-mail:[email protected]
      

  6.   

    我同意大家的意见,在The C++ Programming Language中提到,所有的类似2.6,3.1等数字都是默认为double类型,所以应该显式转换为float类型。