2013-06-18 96 views
0

这个应该返回结果21.5但是这个返回21哪里错了请帮帮我。错误的函数值返回

#include <iostream> 
#include <string> 
#include <conio.h> 
using namespace std; 

float Funkcja(int a) 
{ 
    static_cast<float>(a); 
    a += 1.5; 
    return a; 
} 
void main() 
{ 
    float(*pWskazn)(int); 
    pWskazn = &Funkcja; 
    cout << (pWskazn)(20); 
    getch(); 
} 
+6

'int main();'...... – billz

+1

你的调试器说什么? –

+2

'a'是一个'int';你不能指望它有一个浮点值,不管你做什么(提示:铸造实际上并没有改变铸造变量的值)。 – Gorpik

回答

6

您的演员阵容没有效果,您需要将其存储在变量中。

float Funkcja(int a) 
{ 
    float f = static_cast<float>(a); 
    f += 1.5; 
    return f; 
} 
+3

如果你返回f而不是a,你将有更好的机会21.5 :-) –

+0

@DanielDaranas当然,我试图击败其他人追逐并犯了一个愚蠢的错误。感谢您指出=) – olevegard

1

static_cast<float>(a)不改变的a类型浮动。它将a保存的值转换为浮点数。如代码片段中所使用的,它会丢弃该值,因为它没有被使用。

static_cast<float>(a) + 1.5会做你想做的。

2

您正在将结果指定回a,即int。演员的结果未被使用。

这里是你如何修正功能:

float Funkcja(int a) 
{ 
    return static_cast<float>(a) + 1.5; 
} 

一投是一个表达式,而不是一个声明。当您执行static_cast<float>(a)时,编译器将计算转换的值,您可以在进一步的计算中使用它的值,但变量本身保持不变。

1
static_cast<float>(a); 

不会使a浮动。当它被解释时,它只会使a作为该行的浮点数。

float b = static_cast<float>(a); 
b += 1.5; 
return b;