Во-первых, вы не можете иметь
int val[row][col];
, прежде чем строки и столбцы будут иметь известные значения.Во-вторых, этот тип инициализации двумерного массива является стандартным только в C.
Вам нужно будет вручную разместить массив в куче, используя оператор C ++ new [] (аналогично функции malloc в C).Однако это не идиоматический C ++, и весь смысл языка в том, чтобы избегать этого, поэтому я не буду объяснять, как это сделать.
Правильный способ C ++ для достижения того, что вы хотите, - это использовать стандарт:: vector, очень мощная оболочка для массивов в стиле C, которая автоматически выделяет и освобождает память для вас (и многих других).
Вот самый простой способ сделать это:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int row;
cout << "How many rows are there?" << endl;
cin >> row;
int col;
cout << "How many columns are there?" << endl;
cin >> col;
int num;
cout << "Enter values for the matrix: " << endl;
cin >> num;
vector<vector<int>> values(col); //initialize outer vector with col inner vectors
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
values[i].push_back(num);
}
}
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
cout << values[i][j];
}
cout << endl;
}
return 0;
}
Кроме того, я советую вам называть ваши переменные более значимыми и избегать использования пространства имен std.
РЕДАКТИРОВАТЬ: Исходя из того, как вы подходите к программе, я предполагаю, что в моем ответе вы знакомы с CЕсли это не так, и вы следуете книге или учебнику, вы должны найти лучшую книгу или учебник.