В основном я могу:
Node* myNodeArray2[myHeight][myWidth];//Does not call constructor
for(int i=0; i<myHeight; i++){
for(int j=0; j<myWidth; j++){
theNodeArray[i][j] = new Node("ThisIsTest", 5, 5);
}
}
Таким образом, для вышеуказанного кода myHeight и myWidth могут вводиться пользователем во время выполнения. Он не вызывает конструктор по умолчанию, и я могу использовать новый оператор и пройти через массив, создающий объекты.
Я хочу, чтобы передать Node * myNodeArray2 в функцию и позволить ему создать размер массива и заполнить его. Когда он создается, я хочу, чтобы элементы были указателями. Я не хочу вызывать конструктор по умолчанию. Я хочу иметь возможность по своему выбору вызывать новый оператор с помощью конструктора, отличного от стандартного.
Когда я пытаюсь:
void Test(Node*& theNodeArray, int myHeight, int myWidth){
theNodeArray = new Node*[myHeight][myWidth];
}
int main(){
Node* myNodeArray;
Test(myNodeArray, myHeight, myWidth);
}
я понимаю
msgstr "myWidth не является постоянным выражением".
Я пробовал несколько разных методов, но не могу получить то, что хочу. Мне нужно, чтобы создание произошло в отдельной функции. Мне нужно определить размер во время выполнения. Любая помощь?
Редактировать:
Я не хочу использовать std :: vector.
Изменить 2:
Я не хочу этого делать
int** ary = new int*[sizeX];
for(int i = 0; i < sizeX; ++i)
ary[i] = new int[sizeY];
Поскольку это заставляет строки быть объектами смежного пространства памяти. Я хочу выделить 2d-массив указателей. Я не хочу создавать объекты, на которые нужно указывать.
Вы можете использовать следующее:
Node*** MakeArrayNodePtr(int myHeight, int myWidth){
Node*** res = new Node**[myHeight];
for (int i = 0; i != myHeight; ++i) {
res[i] = new Node*[myWidth]();
}
return res;
}
И не забывайте
void DeleteArrayNodePtr(Node*** nodes, int myHeight, int myWidth)
{
for (int i = 0; i != myHeight; ++i) {
// And probably:
/*
for (int j = 0; j != myWidth; ++j) {
delete nodes[i][j];
}
*/
delete [] nodes[i];
}
delete [] nodes;
}
vector
?