Насколько мне известно, в C++ возможности инициализировать такой массив нет. Все элементы массива в C++ должны быть одинакового типа. В Вашем случае - byte. А массив не является элементом типа byte.
Он является элементом типа byte* (указатель на byte).
Кроме того - Вы хотите хранить в массиве число и строку. Это тоже разные типы, которые хранить в одном массиве нельзя.
Я предлагаю такое решение - создайте структуру, в которой будите хранить byte и строку.
struct ByteAndString
{
byte value;
string str;
};
И заполните весь массив этой структурой
int n = 5;
ByteAndString** array = new ByteAndString*[n];
for (int i = 0; i < n; i++)
{
array[i] = new ByteAndString[n];
}
Теперь можете обращаться к элементам этого массива, каждый из которых содержит строку и byte.
array[0][0].value = 10;
cout << array[0][0].value;
Получается так, что теперь у Вас каждый элемент массива содержит в себе byte и строку. Но Вы можете где то просто не использовать строку. Это не потратит много лишней памяти :)
Есть способ хранить в массиве разные объекты - можно сделать их приводимыми к объекту одного типа и записывать в массив в этом типе, а при обращении обратно приводить в изначальный тип. Для этого нужно применять ООП подход. Это на порядок сложнее, чем инициализировать двумерный статический массив. Поэтому предлагать такой способ решения не буду :D