2016-07-04 90 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