-3

我有一个动态模板数组作为我班级的成员。但是,我无法在构造函数或任何其他函数中调整数组的大小。我对语法感到困惑。这是代码:

template <class Type> class MaxHeapTree {
private:
    HeapNode<Type> *array[];
    HeapNode<Type> *root;
    int elementSize;
    int height;
    int leafCounter;
public: 
    // Constructor
    MaxHeapTree(int n = 10) : elementSize(0), height(0), leafCounter(0) {
        HeapNode<Type> *array = new HeapNode<Type>[n];
    }

该数组是HeapNode<Type>HeapNode 类中包含的对象数组。这是 HeapNode 类的构造函数:

template <class Type> class HeapNode {
private:
    int key;
    Type value;
public:
    HeapNode(int key, Type const &value) {
        this->key = key;
        this->value = value;
    }
4

2 回答 2

2

显示的代码存在多个问题。

HeapNode<Type> *array[];

如上所述,这应该简单地声明:

HeapNode<Type> *array;

然后,在构造函数中:

HeapNode<Type> *array = new HeapNode<Type>[n];

这在构造函数中声明了一个名为“数组”的变量。这绝对不会初始化该名称的类成员。构造函数应该简单地是:

MaxHeapTree(int n = 10) : array(new HeapNode<Type>[n]), elementSize(0),
                          height(0), leafCounter(0)
{
}

据推测,数组的大小 ,n也应该存储在某个地方。但是问题中没有显示那部分。

此外,我什至会质疑是否需要在这里使用动态分配。std::vector我在这里看不到使用, 代替动态分配的数组无法完成的任何事情。现代 C++ 代码很少需要newdelete任何东西,尤其是数组。在大多数情况下,标准 C++ 容器消除了动态分配的需要。如果std::vector从一开始就在这里使用,那么这个问题一开始就不会发生。

于 2016-07-04T23:49:44.693 回答
1

使用容器来管理它:

std::vector<HeapNode<Type>> array
于 2016-07-04T23:51:23.957 回答