2016-07-04 6 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<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; 
    } 
+1

Использовать 'станд :: 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++ редко нуждается в new или delete что угодно, особенно массивы. Стандартные контейнеры C++ устраняют необходимость динамического распределения в большинстве случаев. Если std::vector был использован здесь с самого начала, этот вопрос не был бы в первую очередь.

+0

Мне было поручено использовать динамический массив для создания кучи дерева. Тем не менее, я пробовал эту инициализацию раньше, и она не будет компилироваться. – luigi741

+2

«Не скомпилировать» не является полезным описанием проблемы. –

+0

'MaxHeapTree.h: В конкретизации 'MaxHeapTree :: MaxHeapTree (INT) [с Type = станд :: __ 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 

 Смежные вопросы

  • Нет связанных вопросов^_^