string** tree [3][maxNumberOfNodes];
Здесь объявляется двумерный массив из string**
указателей.Это не то, что вы хотите.Вместо этого вам нужен двумерный массив из string
объектов, поэтому отбросьте указатели:
string tree [3][maxNumberOfNodes];
Кроме того, ваш printTree()
не реализован правильно.Это должно быть реализовано более следующим образом:
void printTree(string** tree, int height) {
for(int i = 0; i < 3; i++) {
for(int j = 0; j < height; j++) {
// use tree[i][j] as needed ...
}
}
}
При этом, поскольку значение maxNumberOfNodes
неизвестно до времени выполнения, синтаксис string tree [3][maxNumberOfNodes]
объявляет переменную длину Массив , который официально не поддерживается стандартом C ++, только как расширение несколькими компиляторами C ++.Вместо этого вам нужно использовать new[]
, чтобы выделить 2-е измерение:
string* tree [3];
for(int i = 0; i < 3; ++i)
tree[i] = new string[maxNumberOfNodes];
printTree(tree, maxNumberOfNodes);
for(int i = 0; i < 3; ++i)
delete[] tree[i];
Или лучше использовать std::vector
вместо:
std::vector<string> tree [3];
for(int i = 0; i < 3; ++i)
tree[i].resize(maxNumberOfNodes);
Хотя в этом последнем случае вы выигралиневозможно передать tree
параметру функции string**
, поэтому вам придется соответствующим образом изменить код.