我有一个动态模板数组作为我的类的成员。但是,我无法在构造函数或任何其他函数中调整数组的大小。我对语法感到困惑。这是代码:
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类中包含的HeapNode<Type>
个对象数组。这是HeapNode类的构造函数:
template <class Type> class HeapNode {
private:
int key;
Type value;
public:
HeapNode(int key, Type const &value) {
this->key = key;
this->value = value;
}
答案 0 :(得分:2)
显示的代码存在多个问题。
HeapNode<Type> *array[];
如上所述,应该声明这一点,简单地说:
HeapNode<Type> *array;
然后,在构造函数中:
HeapNode<Type> *array = new HeapNode<Type>[n];
这在构造函数中声明了一个名为&#34; array&#34;的变量。这对于初始化该名称的类成员绝对没有任何作用。构造函数应该只是:
MaxHeapTree(int n = 10) : array(new HeapNode<Type>[n]), elementSize(0),
height(0), leafCounter(0)
{
}
据推测,数组的大小n
也应该存储在某个地方。但问题中没有显示那部分。
此外,我还要质疑在这里使用动态分配的必要性。我在这里看不到任何使用std::vector
代替动态分配的数组无法实现的功能。现代C ++代码很少需要new
或delete
任何东西,尤其是数组。在大多数情况下,标准C ++容器消除了动态分配的需要。如果从一开始就使用std::vector
,那么这个问题就不会发生在第一位。
答案 1 :(得分:1)
使用容器进行管理:
std::vector<HeapNode<Type>> array