1

试图用 C++ 编写风寒因子方程,但我的方程和返回值有问题。

这是出现错误的函数。

void eqfunction(int temperature, int windspeed){
    int windindex;
    windindex = 35.74 + (0.6215 * temperature);
    windindex = windindex - (35.75 * windspeed^0.16);
    windindex = windindex + ((0.4275 * temperature)*windspeed^0.16);
    return windindex;
}

编辑:(Ed.)在按照答案中给出的建议修复功能后,会出现新的错误:

float windChillFactor(float temperature, float windspeed){
    float windindex = 35.74f + 0.6215f * temperature;
    windindex -= 35.75f * std::pow(windspeed, 0.16f);
    windindex += 0.4275f * temperature * std::pow(windspeed, 0.16f);
    return windindex;
}

我知道有两件事我做错了,我只是不知道如何解决它们。显然它是“^”和我的返回值。我将如何从 0.16 为风速创建一个正方形?我将如何创建正确的 windindex 返回值?

这些是我的错误

1>c:\users\ryan\desktop\final.cpp\final.cpp\final project.cpp(18):
  warning C4244: 'argument' : conversion from 'int' to 'float',
  possible loss of data
1>c:\users\ryan\desktop\final.cpp\final.cpp\final project.cpp(18):
  warning C4244: 'argument' : conversion from 'int' to 'float',
  possible loss of data
1>c:\users\ryan\desktop\final.cpp\final.cpp\final project.cpp(18):
  error C2440: '=' : cannot convert from 'void' to 'int'
1>          Expressions of type void cannot be converted to other types
1>c:\users\ryan\desktop\final.cpp\final.cpp\final project.cpp(22):
  error C2556: 'float eqfunction(float,float)' : overloaded function differs
  only by return type from 'void eqfunction(float,float)'
1>          c:\users\ryan\desktop\final.cpp\final.cpp\final project.cpp(6) :
            see declaration of 'eqfunction'
1>c:\users\ryan\desktop\final.cpp\final.cpp\final project.cpp(22):
  error C2371: 'eqfunction' : redefinition; different basic types
1>          c:\users\ryan\desktop\final.cpp\final.cpp\final project.cpp(6) :
            see declaration of 'eqfunction'
4

4 回答 4

5

虽然您没有包含编译器给出的错误消息(您应该始终这样做),但我看到的错误如下:


void eqfunction(int temperature, int windspeed){
  • 错误:您的函数返回一个值。void函数是不返回任何内容的函数,在其他一些编程语言中也称为“过程”。因为要返回实数,所以可能要使用float(也有doubleand long double,但在日常使用中,float通常足够精确)。
  • 设计错误:温度和风速是实数,所以你的函数不应该取int但是float
  • 给你的函数一个描述性的名字是很好的做法,就像你对变量名所做的那样(与 C 不同,在 C++ 中,使用记忆函数名更常见)

    int windindex;
  • 始终初始化内置类型是一种很好的做法
  • 您正在使用实数类型计算最终结果,但如果您用于int存储中间结果,则可能会丢失重要信息(将实数类型分配给整数类型时,小数部分被丢弃);所以代替int, 使用float

    windindex = 35.74 + (0.6215 * temperature);
    windindex = windindex - (35.75 * windspeed^0.16);
    windindex = windindex + ((0.4275 * temperature)*windspeed^0.16);
  • 错误:运算符^是 C++ 中的按位异或运算符。power函数是C++中的一个库函数,即std::pow(x,y)从头cmath文件
  • 算术运算a = a + something, a = a - something,a = a * somethinga = a / something可以简化为a += something, 其他的也一样
  • 在 C++ 中,形式中的文字1.0表示一个double值,而形式中的文字1.0f表示一个float

    return windindex;
}
  • 没关系。

因此,考虑到这些要点,这可能更适合您的需求:

#include <cmath>

float windChillFactor(float temperature, float windspeed){
    float windindex = 35.74f + 0.6215f * temperature;
    windindex -= 35.75f * std::pow(windspeed, 0.16f);
    windindex += 0.4275f * temperature * std::pow(windspeed, 0.16f);
    return windindex;
}

请注意,由于运算符优先级,*并且在and/之前进行了评估,因此不需要括号。+-

于 2013-01-26T19:30:44.967 回答
2

这是可能的错误:

windspeed^0.16

在 C++ 中,^是按位异或 (XOR) 运算符。

您可能的意思是提高windspeed的力量0.16,您可以使用std::pow

除此之外,你的函数应该返回 void 以外的东西。看起来它应该返回 float 或 double,windindex而不应该是int,而是一些浮点类型。+=最后,您可以使用and稍微简化表达式-=

#include <cmath> // for std::pow
double eqfunction(int temperature, int windspeed)
{
    double windindex = 35.74 + 0.6215 * temperature;
    windindex -= 35.75 * std::pow(windspeed, 0.16);
    windindex += 0.4275 * temperature * std::pow(windspeed, 0.16);
    return windindex;
 }
于 2013-01-26T19:19:52.193 回答
1
double eqfunction(int temperature, int windspeed)
{
    double windindex = 35.74 + 0.6215 * temperature;
    windindex -= 35.75 * std::pow(windspeed, 0.16);
    windindex += 0.4275 * temperature * std::pow(windspeed, 0.16);
    return windindex;
 }
于 2013-01-26T19:19:27.163 回答
0
double eqfunction(int temperature, int windspeed){
    double windindex;
    windindex = 35.74 + (0.6215 * temperature);
    windindex = windindex - (35.75 * pow(windspeed,0.16));
    windindex = windindex + ((0.4275 * temperature)*pow(windspeed,0.16));
    return windindex;
}
于 2013-01-26T19:19:20.370 回答