Страницы

Поиск по вопросам

среда, 30 января 2019 г.

Ошибка cannot resolve overloaded

Учусь программировать на c++. Возникла странная ошибка при работе с функциями:
cannot resolve overloaded function 'max' based on conversion to type 'double'
Сам код:
#include using namespace std; void maxi(double max) { int i; i=0; float y[5]={3,-2,0.9,0.5,1}; max = -999999; for(i=0; i<5; ++i) { if(y[i] > max) { max = y[i]; }
} }
int main() { cout <<"max value:"<< maxi(max); return 0; }
При очистке параметра max уже в функции main выдается другая ошибка.


Ответ

В этом предложении
cout <<"max value:"<< maxi(max); ^^^
вы используете имя max, которое вы не определили. С другой стороны, благодаря директиве
using namespace std;
вы вводите имена из пространства std в глобальное пространство имен. Видимо имя max, которое соответствует стандартному адноритму std::max в пространтсве имен std также было включено в глобальное пространство имен, и компилятор думает, что в предложении, показанном выше вы в качестве аргумента используете функцию max
Объявите переменную max в main
Обратите внимание, что в функции maxi значение аргумента не используется. Оно перезаписывается в функции
void maxi(double max) { int i; i=0; float y[5]={3,-2,0.9,0.5,1}; max = -999999; ^^^^^^^^^^^^^^
Так что нет никакого смысла объявлять параметр для функции, если его значение в функции не используется. Вы могли бы объявить локальную переменную в функции, как, например,
void maxi() { int i; i=0; float y[5]={3,-2,0.9,0.5,1}; double max = -999999;
^^^^^^^^^^^^^^^^^^^^^
Кроме того в предложении
cout <<"max value:"<< maxi(max);
вы пытаетесь использовать результат работы функции. Поэтому функция должна иметь возвращаемое значение отличное от void. Ее определение могло бы выглядеть следующим образом
double maxi() { int i; i=0; double y[5]={3,-2,0.9,0.5,1}; ^^^^^^ double max = -999999;
//... return max; }
Также нет никакого смысла объявлять переменную i вне цикла, так как она используется только в цикле.
Имейте в виду, что в C++ уже имеется стандартный алгоритм std::max_element, объявленный в заголовке , который позволяет находить максимальное значение заданной последовательности.

Комментариев нет:

Отправить комментарий