无法动态设置结构变量的数组大小

时间:2015-04-11 14:54:17

标签: c++ arrays pointers struct constructor

以下两段代码都是我实际代码的大大简化的隔离版本。这些例子足以说明问题。下面的第一部分代码工作正常。部分部分试图开始使其成为课程的一部分。挑战在于使得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;
}

1 个答案:

答案 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);