1. ホーム
  2. c++

[解決済み] エラー: 二項演算子 '/' に対する型 'int' および 'float*' のオペランドが無効です。

2022-02-06 21:01:18

質問

Error: invalid operands of types 'int' and 'float*' to binary'operator/'
int *average = new int((num) / data);

が表示されるのは、この行のコードのためです。 なぜそうなるのでしょうか?

float *data;
int num;
int mode;
double average, median;

cout << "How many students were surveyed?  ";
cin >> num;
data = makeArray(num);

float getAverage(float *data, int num)
{
    int *average = new int((data) / num);
    return *average;
}

解決方法は?

これは、互換性のない2つの型を一緒に比較していることを意味します。1つは numdataint であり、もう一方は float* . 必要な動作に応じて、次のようにします。

  1. のようにポインタをデリファレンスします。 *x に対して、どちらかというと x がポインタ
    2a. をキャストしたいと思います。 intfloat に対して floating point division で、result は int
    2b. をキャストすることになります。 floatint については integer division に変換され、再び int .

更新情報
コードを更新されたので、より大きな問題を指摘します。あなたは今、メモリをリークしています。

また、入力パラメータに対称性を持たせ、constの正しさも考慮することをお勧めします。

//your code:
float getAverage( float *data, int sum )
{    
    //data is a float* and needs to be de-ref'd and casted to int for float but isnt
    int *average = new int( (data) / num );
    //note that now average is a pointer to a newly constructed int that will never be free'd
    return *average;  //because you return it here, where the value will then be implicily converted to a float and be mostly worthless.
}

// In both suggestions I will use symmetric types, I will not introduce dynamic memory and I will use floating point division for maximal accuracy.

// Suggestion one use Const References
float getAverage( const float &data, const int &num)
{
    float result = data / (float) num;
    return result;
}

// Suggestion two use pointers to constants
float getAverage( const float *data, const int *num )
{
    float result = (*data) / float(*num);
    return result;
}

// Suggestion three pass by value since primitives are cheap
float getAverage( float data, int num)
{
    float result = data / (float) num;
    return result;
}