以下两段代码都是我实际代码的大大简化的隔离版本。这些例子足以说明问题。下面的第一部分代码工作正常。部分部分试图开始使其成为课程的一部分。挑战在于使得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;
}
答案 0 :(得分:0)
在您的第一个示例中,Node *branch[maxSize + 1];
是一个Node指针数组。在第二个示例中,branch = new Node[size];
创建了一个Node 对象数组。这是一个显着的差异,可能会让你失望。
您可以使用原始语法完成所需的操作:
Node **branch;
branch = new Node*[size];
但正如有人已经指出的那样,std::vector
通常更容易和更好:
std::vector<Node*> branch;
branch.resize(size);