С++ ошибка необъявленный идентификатор

Подскажите пожалуйста, как обойти эту проблему. Не могу понять в чём дело, значение аргумента предопределено, но он считается необъявленным.(ошибка возникает на 29 строке)

#include <iostream>
#include <random>
#include <time.h>
#include <windows.h>
using namespace std;
 int sortIncrease(int a[], const int length, bool IsOn = false) {
    for (size_t i = 0; i < length; i++)
    {
        for (size_t j = 0; j < length; j++)
        {
            if (a[i] > a[j]) {
                a[i] = a[j] + a[i];
                a[j] = a[i] - a[j];
                a[i] = a[i] - a[j];
            }
        }
        cout << a[i];
    }
}
int main() {
    const int length = 10;
    int UserChoice;
    int a[length]={1,3,5,2,8,11,9,4,15,19};
    
    cout << "Choose sorting metod:\n1-> increasing\n0->decreasing"<<endl;
    cin >> UserChoice;

    if (UserChoice == '1') {
        cout << sortIncrease(a, length, IsOn = false);

    }
     



}

Ответы (1 шт):

Автор решения: Harry

Во-первых, такой вызов

sortIncrease(a, length, IsOn = false);

означает передачу в качестве третьего аргумента значения false, которое одновременно присваивается переменной IsOn. А переменная IsOn у вас в main и в самом деле не объявлена.

Чтоб было понятнее:

double x;
double y = sqrt(x = 2);

Здесь после второй строки переменная x получает значение 2, а y — корень из 2.

Если вы хотите передать в качестве третьего аргумента false — можете вообще его не упоминать, так как это аргумент со значением false по умолчанию, но можете и явно его указать.

sortIncrease(a, length, false)
sortIncrease(a, length)

это — два одинаковых вызова функции.

P.S. Использованный вами метод обмена менее эффективен, чем метод с использованием временной переменной, а главное, может не работать при больших значениях переменных, когда сумма выйдет за пределы представимых значений.

→ Ссылка