2016-07-04 93 views
-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类包括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; 
    } 
+1

使用'的std :: VECTOR'代替。 –

+1

与调整“动态非模板数组”的方式相同。 – juanchopanza

回答

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这个问题,首先这个问题不会发生。

+0

我的任务是使用动态数组创建堆树。不过,我已经尝试过这种初始化,它不会编译。 – luigi741

+2

“它不会编译”不是一个有用的问题描述。 –

+0

'MaxHeapTree.h:在实例化 'MaxHeapTree :: MaxHeapTree(INT)[与类型=标准:: __ cxx11 :: basic_string的]': main.cpp中:14:61:从这里 MaxHeapTree.h要求: 22:98:错误:没有匹配函数调用'HeapNode > :: HeapNode()' xHeapTree(int n = 10):array(new HeapNode [n]),elementSize (0),height(0),leafCounter(0)' – luigi741

1

使用容器来管理它:

std::vector<HeapNode<Type>> array