1. ホーム
  2. スクリプト・コラム
  3. その他

[解決済み】エラー。式はintegralまたはunscoped enum型でなければなりません。

2022-01-11 04:20:11

質問

コードは次のとおりです。

#include <iostream>
#include <iomanip>
#include <string>
#include <algorithm>
#include <sstream>

using namespace std;

int main(){

  float size;

  float sumNum = 0;
  float maxNum, minNum;
  float mean;
  float totalDev = 0;
  float devSqr = 0;
  float stdDev;

  //Create a user input size
  std::cout << "How many number would you like to enter? ";
  std::cin >> size;
  float *temp = new float[size];

  //Getting input from the user
  for (int x = 1; x <= size; x++){
    cout << "Enter temperature " << x << ": ";
    cin >> temp[x];
  }

  //Output of the numbers inserted by the user
  cout << endl << "Number --- Temperature" << endl << endl;
  for (int x = 1; x <= size; x++){
    cout << "   " << x << "   ---     " << temp[x] << endl;
    sumNum = sumNum + temp[x];
  }

  //Calculating the Average
  mean = sumNum / size;
  maxNum = minNum = temp[1];

  for (int x = 1; x <= size; x++){
    if (maxNum < temp[x]){
      maxNum = temp[x];
    }
    if (minNum > temp[x]){
      minNum = temp[x];
    }
  }

  //Calculating Sample Standard Deviation
  for (int x = 1; x <= size; x++){
    totalDev = totalDev + (temp[x] - mean);
    devSqr = devSqr + (pow((temp[x] - mean), 2));
  }
  stdDev = sqrt((devSqr / (size - 1)));

  cout << endl << "The sum: " << sumNum << endl; //the sum of all input
  cout << "The mean: " << mean << endl; //calculate the average 
  cout << "Maximum number: " << maxNum << endl; // print biggest value
  cout << "Minimum number: " << minNum << endl; // print smallest value
  cout << "The range between the maximum and the minimum: " << maxNum - minNum << endl; //the range
  cout << "Deviation: " << totalDev << endl;
  cout << "The squares of deviation: " << devSqr << endl;
  cout << "The Standard Deviation: " << setprecision(1) << fixed << stdDev << endl;

  system("pause");
}

配列のサイズを取得する際に、( float *temp = new float[size]; というエラーが発生します。

expression must have integral or unscoped enum type.

数値を入力しようとすると、うまくいくのですが。その後、偏差値から標準偏差まで計算すると、すべて台無しになります。

もし私が int を 'size' に、'temp' を float と表示され、別のエラーが発生しました。

解決方法は?

あなたの変数 size と宣言されています。 float size;

浮動小数点型変数を配列のサイズとして使用することはできません - 整数値である必要があります。

キャストして整数に変換することができます。

float *temp = new float[(int)size];

もうひとつの問題は、配列の境界の外側に書いていることでしょう。

   float *temp = new float[size];

    //Getting input from the user
    for (int x = 1; x <= size; x++){
        cout << "Enter temperature " << x << ": ";

        // cin >> temp[x];
        // This should be:
        cin >> temp[x - 1];
    }

C++では配列はゼロベースなので、これは終わりを超えて書き込まれ、元のコードの最初の要素には決して書き込まれません。