Страницы

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

понедельник, 6 января 2020 г.

Ошибка cannot resolve overloaded

#cpp #алгоритм #функции


Учусь программировать на 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 выдается другая ошибка.
    


Ответы

Ответ 1



В этом предложении 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, объявленный в заголовке , который позволяет находить максимальное значение заданной последовательности.

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

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