Оба раздела кода, приведенные ниже, значительно упрощены, изолированные версии моего фактического кода. Примеры достаточно велики, чтобы проиллюстрировать проблему. Первый раздел кода ниже работает отлично. Секция раздела - это попытка начать делать ее частью класса. Задача состоит в том, чтобы сделать так, чтобы переменная maxSize могла быть задана пользователем во время выполнения в конструкторе, а не в качестве жестко заданного значения. Чтобы добавить к этому, я ищу решение, которое позволяет мне только изменить способ объявления структуры и изменить то, что делается внутри метода Initialize() (который в конечном итоге станет конструктором класса). Я уже потратил несколько часов на внесение изменений, требующих изменений в других 50+ методах, которые никогда не срабатывали, поэтому мне интересно, есть ли у меня решение, которое не требует изменения других 50+ методов.Невозможно динамически установить размер массива для структурных переменных
Рабочий код:
#include <cstdio>
#include <cstdlib>
#include <iostream>
using std::cout;
using std::endl;
const int maxSize = 3;
Node *root;
struct Item{
string key;
string value;
};
struct Node{
int count;
Item key[maxSize + 1];
Node *branch[maxSize + 1];
};
/*
-------
^
|
50+ of other methods, all using these structs as pointers,
pointers to pointers, & references.
|
v
-------
*/
int main(int argc, char *argv[])
{
return 0;
}
Пример только одной попытки очень постепенно модифицировать код в целом к превращению в класс:
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <string>
using std::cout;
using std::endl;
using std::string;
int maxSize;
Node *root;
struct Item{
string key;
string value;
};
struct Node{
int count;
Item *item;
Node *branch;
// doesn't work because it requires
// modification of the rest of the code
// which has only resulted in an infinite loop of debugging
void init(int size)
{
item = new Item[size];
branch = new Node[size];
}
};
void Initialize(int size)
{
maxSize = size;
}
/*
-------
^
|
50+ other methods, all using these structs as pointers,
pointers to pointers, & references.
|
v
-------
*/
int main(int argc, char *argv[])
{
Initialize(5);
return 0;
}
Остановите безумие и просто использовать 'зЬй: : vector' – PaulMcKenzie
'Мне интересно, есть ли решение, которое я пропустил, что не требует изменения других 50+ методов. Мы понятия не имеем, как эти другие методы взаимодействуют с кодом, который вы опубликовали. Все, что можно сделать, это дать вам * * решение, которое намного лучше и безопаснее ваших попыток. – PaulMcKenzie