Ti ho detto che devi allocare la memoria dinamicamente, qui c'è un esempio
codice:
#include <iostream>
 
using namespace std;
 
void inizializza_matrice(int *mat, int r, int c);
void stampa_matrice(int *mat, int r, int c);
 
int main() {
    int r, c;
    do {
        
        cout << "Inserire il numero di righe e colonne (>=0)" << endl
            << "Righe: ";
        cin >> r;
        cout << "Colonne: ";
        cin >> c;
    } while(c < 0 || r < 0);
    int *mat = new int[r*c];
    inizializza_matrice(mat, r, c);
    cout << endl;
    stampa_matrice(mat, r, c);
    delete[] mat;
    return 0;
}

void inizializza_matrice(int *mat, int r, int c) {
    cout << endl << "Inserire gli elementi della matrice" << endl;
    for(int i = 0; i < r; i++) {
        for(int j = 0; j < r; j++) {
            cout << "(" << i+1 << ", " << j+1 << "): ";
            cin >> mat[i*c+j];
        }
    }
}
 
void stampa_matrice(int *mat, int r, int c) {
    for(int i = 0; i < r; i++) {
        for(int j = 0; j < r; j++) {
            cout.width(4);
            cout << mat[i*c+j];            
        }
        cout << endl;
    }
}