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;
}

編集:(編集)回答で与えられたアドバイスに従って関数を修正した後、新しいエラーが発生します:

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;
}

私が間違っていることが2つあることを知っていますが、それらを修正する方法がわかりません。明らかに、その「^」と私の戻り値です。風速の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(ともありますdoublelong double、日常の使用でfloatは、十分に正確であることがよくあります)。
  • 設計エラー:温度と風速は実数であるため、関数は取る必要はありませんintfloat
  • 変数名で行ったように、関数にわかりやすい名前を付けることをお勧めします(Cとは異なり、C ++では、ニーノミック関数名を使用しないのが一般的です)。

    int windindex;
  • 組み込み型を常に初期化することをお勧めします
  • 実数型を使用して最終結果を計算していますが、int中間結果を格納するために使用すると、重要な情報が失われる可能性があります(実数型を整数型に割り当てる場合、小数部分は破棄されます)。したがって、の代わりにintfloat

    windindex = 35.74 + (0.6215 * temperature);
    windindex = windindex - (35.75 * windspeed^0.16);
    windindex = windindex + ((0.4275 * temperature)*windspeed^0.16);
  • エラー:演算子^はビット単位の排他的論理和演算子です-またはC++の演算子。べき関数は、C ++のライブラリ関数、つまりヘッダーstd::pow(x,y)からのものです。cmath
  • 算術演算、、、a = a + somethingおよびは、に簡略化できます。a = a - something他の演算も同様です。a = a * somethinga = a / somethinga += 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;
}

演算子の優先順位のため、*およびはとの前に/評価されるため、括弧は必要ありませんでした。+-

于 2013-01-26T19:30:44.967 に答える
2

これは考えられるエラーです:

windspeed^0.16

C ++では、^はビット単位の排他的論理和(XOR)演算子です。

あなたはおそらく、あなたが使うことができるwindspeedの力に上げることを意味します:0.16std::pow

それ以外に、関数はvoid以外のものを返す必要があります。floatまたはdoubleを返す必要があり、そうでwindindexはないように見えますintが、浮動小数点型です。+=最後に、とを使用して式を少し簡略化できます-=

#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 に答える