В ваших функциях отсутствует явное значение return
(вы также не можете изменить тип переменной в той же области видимости, поэтому ваш компилятор будет жаловаться, когда она достигнет double num1,num2;
).
КакКак минимум, вам нужно написать
double findminval(double num1, double num2){
double minval;
if (num1 < num2){
minval = num1;
} else {
minval = num2;
}
return minval;
}
, хотя вы могли бы упростить, возможно, за счет того, что его сложнее отлаживать, до
double findminval(double num1, double num2){
if (num1 < num2){
return num1;
} else {
return num2;
}
}
или даже
double findminval (double num1, double num2){
return num1 < num2 ? num1 : num2;
}
Обратите внимание, что вы могли бы templatise это так, что вам не нужны две функции:
template<typename Y> Y findminval(const Y& num1, const Y& num2){
return num1 < num2 ? num1 : num2;
}
Обратите внимание, что теперь я передаю ссылку const
, чтобы устранить возможные копии значений,Теперь вы видите, что мы натыкаемся на std::min
.Есть один последний момент, который следует учитывать: «этикет» должен возвращать первый аргумент, если параметры равны.Это позволяет сохранить знаковый ноль с плавающей запятой или даже целочисленный тип в системе дополнения 1.Так что это, вероятно, лучшее, что нужно сделать, кроме использования std::min
:
template<typename Y> Y findminval(const Y& num1, const Y& num2){
return num1 <= num2 ? num1 : num2;
}