Переменная, доступная только для чтения, не может быть назначена

76
6

Да, это для домашней работы, мой код просит меня ввести массив, который заканчивается при вводе числа 0 или когда он достигает максимального числа целых чисел ARRAY_SIZE поэтому, когда я ARRAY_SIZE в свой код array[num_elements]=i; строк array[num_elements]=i; возвращает ошибку, указывающую, что Read-only variable is not assignable.

void read_list(const int array[], int & num_elements) {
int i(1);

cout<<"Enter list of "<< ARRAY_SIZE<<" integers (ending with 0)";

while (i != 0 && num_elements < ARRAY_SIZE) {
cin >> i;
array[num_elements] = i;
num_elements++;
}

}

спросил(а) 2021-01-25T16:33:41+03:00 4 месяца, 3 недели назад
1
Решение
131

Ну, ваши поля массива являются переменными только для чтения, поэтому вы не можете присваивать им значения.

Удалите const, и он должен работать нормально.

Я не уверен, что array[num_elements] = num_elements++ делает что-то полезное. Возможно, вы хотели сделать array[num_elements++] = i вместо этого?

ответил(а) 2021-01-25T16:33:41+03:00 4 месяца, 3 недели назад
63

Вы используете постоянную ссылку на элементы доступа массива. Вы не можете назначать эти элементы с использованием постоянной ссылки. Поэтому вам нужно удалить спецификатор const из объявления параметра.

Также неправильный код функции. Например, он инициализирует num_elements и присваивает 0 последнему элементу массива.

Функция должна выглядеть следующим образом


int read_list( int array[], int max_size ) 
{
int i = 0;
int x;

std::cout<<"Enter list of no more than " << max_size << " integers (0 - exit): ";

while ( i < max_size && std::cin >> x && x != 0 )
{
array[i++] = x;
}

return i;
}

И его можно назвать

int num_elements = read_list( YourArray, ARRAY_SIZE );  

ответил(а) 2021-01-25T16:33:41+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема