Questo non è C++ valido. è definito in C99 ma non tutt i compilatori lo supportano. Per info si chiama VLA(variable length array)
cin >> dim1;
cin >> dim2;
int matrice[dim1][dim2];
Se la dimensione dell'array/matrice non è nota devi usare il new. Una cosa del tipo:
int main()
{
int dim1,dim2;
cout<<"Inserisci le dimensioni della matrice \n";
cin>>dim1;
cin>>dim2;
// Create row pointers
int **matrix = new int * [dim1];
// Create the data for the matrix in one call.
int *matrix_data = new int[dim1*dim2];
// Create n*n matrix
for (int i=0; i < dim1; i++, matrix_data+=dim2)
matrix[i] = matrix_data; // point row pointers to matrix data
// delete matrix
delete []matrix[0]; // delete the beginning of the matrix data
delete [] matrix; // delete the row pointers.
}