@waterfly1

Как исправить ошибку «выражение должно иметь константное значение»?

int main() {

    int N = 20; int k = 11;;
    int M[N - 1] = { 1,2,5,8,2,5,8,10,11,1,3,1,11,10,1,11,7,7,3,1 };
    int MM[N - 1] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
    int S[k - 1] = { 5,4,3,2,1,7,8,9,10,11,6 };

    cout << "Массив M " << N << " элементов" << endl;
    for (int i = 0; i < N; i++) cout << M[i] << "  ";
    cout << endl;
    cout << "Массив S " << k << " элементов" << endl;
    for (int i = 0; i < k; i++) cout << S[i] << "  ";
    cout << endl;

    cout << "Массив до шифрования " << N << " элементов" << endl;
    for (int i = 0; i < N; i++) cout << MM[i] << "  ";
    cout << endl;

    int q;
    for (int i = 0; i < N; i++)
    {
        q = M[i];
        MM[i] = S[q - 1];
    }
    cout << "Массив после шифрования " << N << " элементов" << endl;
    for (int i = 0; i < N; i++) cout << MM[i] << "  ";
}
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Acaunt
Когда создаёшь статический массив таким образом, когда имеется переменная в которой хранится размер. То переменная должна быть константной.
...
const int size = 20;
int arr[size] = { .... };


В твоём примере имеется ещё одна ошибка. Ты зачем-то выделил размер под массив на один элемент меньше, а пытаешься присвоить больше чем выделил. Можешь написать чего ты добивался этим: [N - 1]

Если ты не хочешь делать размер константным то тебе нужно смотреть в сторону динамического массива.

Также, если ты не знаешь на сколько тебе потребуется массив ты можешь сделать так:
...
int arr[] = {0,1,2,3,4,5,6,7,8,9};
const int size = std::size(arr);

Компилятор сам сможет определить размер массива.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы