0

Это часть моей программы для умножения 2-х матриц.Ошибка при инициализации 2D-массива

int m1, m2, n1, n2; 
int first[m1][n1], second[m2][n2], result[m1][n2]; 
cout<<"Please enter no.of rows and columns of the 1st Matrix, respectively :"; 
cin>>m1>>n1; 

И я получаю эти ошибки

error C2057: expected constant expression 
error C2466: cannot allocate an array of constant size 0 
error C2057: expected constant expression 
error C2087: '<Unknown>' : missing subscript 
error C2133: 'first' : unknown size 

Я печатаю этот код в Visual C++ 6.0 (Очень старая версия), потому что это в настоящее время, что учат нас в школе. Пожалуйста, помогите мне избавиться от этих ошибок. Заранее спасибо.

+0

Я не знаю, если вам разрешено инициализировать размеры массива с переменными ... являются '' m1' m2' '' n1' и n2' определены до инициализации многомерных массивов? Вы проверили программу, заменив переменные на фактические цифры? – ahitt6345

+0

Вы используете переменные до их инициализации – stackptr

+0

Используйте кучу. Сделайте что-то вроде этого: int ** first = new int * [m]; for (int i = 0; i user222031

ответ

0

Вы должны использовать константные значения (значения известны во время компиляции), если вы хотите, чтобы инициализировать массив, как это. Например:

const int r = 1, c = 2; 
int m[r][c]; 

Однако в вашем случае, если вы не знаете размер во время компиляции. Поэтому вам нужно создать динамический массив. Вот пример фрагмента.

#include <iostream> 

int main() 
{ 
    int n_rows, n_cols; 
    int **first; 
    std::cout << "Please enter no.of rows and columns of the 1st Matrix, respectively :"; 
    std::cin >> n_rows >> n_cols; 

    // allocate memory 
    first = new int*[n_rows](); 
    for (int i = 0; i < n_rows; ++i) 
     first[i] = new int[n_cols](); 

    // don't forget to free your memory! 
    for (int i = 0; i < n_rows; ++i) 
     delete[] first[i]; 
    delete[] first; 

    return 0; 
} 
0

Перед тем, как использовать их для инициализации некоторых массивов, необходимо назначить некоторые числа для этих переменных (m1, m2, n1, n2). Когда вы не даете им некоторые значения, изначально они равны 0. По-видимому, вы не можете создать массив размером 0 и это логично. Размер массива постоянный, а массив размера 0 не имеет смысла.

Может быть, вам нужно попробовать что-то вроде этого:

int m1, m2, n1, n2; 

cout << "Please enter no.of rows and columns of the 1st Matrix, respectively :"; 
cin >> m1 >> n1; 

cout << "Please enter no.of rows and columns of the 2st Matrix, respectively :"; 
cin >> m2 >> n2; 

int first[m1][n1], second[m2][n2], result[m1][n2]; 
Смежные вопросы