С++ ошибка необъявленный идентификатор
Подскажите пожалуйста, как обойти эту проблему. Не могу понять в чём дело, значение аргумента предопределено, но он считается необъявленным.(ошибка возникает на 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 шт):
Во-первых, такой вызов
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. Использованный вами метод обмена менее эффективен, чем метод с использованием временной переменной, а главное, может не работать при больших значениях переменных, когда сумма выйдет за пределы представимых значений.