0

我仍然只是从 C++ 开始,还没有处理太多类型转换。然而,我的印象是语法是(type) (variables),这在这种情况下似乎不起作用。

float calcSphere (int radius)
{
    float sphereSA;

    sphereSA =  (4 * PI *  (radius*radius));

    return sphereSA;

}

#define PI 3.14PI 是在代码顶部使用声明的符号常量,我试图通过使用来解决这个问题,(float) (4 * PI * (radius*radius))但这并没有解决任何问题。谷歌似乎也返回了关于这个主题的相当模糊的结果。有什么解决办法吗?

4

2 回答 2

1

只是一个猜测,但是,您是否收到有关初始化将双精度转换为浮点数的警告(使用 MSVS)?或者可能它搞砸了 b/c 一切最终都被转换为 '4' 的整数 b/c?

如果是这样,问题是当你输入一个数字时,它是一个双精度数。但是您将它用作浮点数,要解决它,该数字必须是所投射的。例如

sphereSA = ((float) 4 * (float) PI * radius * radius);

但是,最好给编译器一些关于 PI 的类型信息。例如

namespace MyConstants {
    const float PI = 3.141;
}
sphereSA = ((float) 4 * MyConstants::PI * radius * radius);
于 2013-02-28T19:53:05.447 回答
-4

您正在使用 C 风格的演员表。强制转换的语法随着 C++ 的变化而改变。你想寻找这样的东西:

dynamic_cast<something*>( yourthing );
于 2013-02-28T19:47:33.430 回答