Ошибка: недопустимые операнды типов ‘int’ и ‘float *’ для бинарного оператора ‘/’

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

1

Решение

Это означает, что вы сравниваете два несовместимых типа вместе. Один из num а также data является intа другой float*, В зависимости от поведения, которое вы хотите, вы захотите

  1. Разыменуйте указатель, как в *x для того, что x это указатель
    2а. Вы хотите разыграть int к float за floating point divisionгде результат преобразуется обратно в int
    2b. Вы хотите разыграть float для int, за integer division, который затем будет преобразован обратно в int,

Обновить
Поскольку вы обновили свой код, я укажу на большую проблему; у тебя сейчас утечка памяти.

Я бы посоветовал вам вместо этого возвратить ваше целое число по значению и, возможно, передать по ссылке или константе ссылки и избегать указателей целиком, но более того, я бы предложил некоторую симметрию в ваших входных параметрах, а также правильность констант:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]