2015-03-22 3 views
0

Я пытаюсь создать класс для реализации HashTable(C++) Конструктор для HashTable

Поскольку я делаю приковано HashTable, мой хэш-таблица начинается как массив указателей типа «объект».

У меня возникли проблемы с моим конструктором, так как в моем основном файле я собираюсь принять значение для размера массива. Как это:

int N; 
scanf("%d", &N); 
//Create HashTable Object 
HashTable *hash = new HashTable(N); 

Это мой .h файл:

class HashTable { 

    int arraySize; 

    typedef struct object { 
     string data; 
     object *nextptr; 
    } object; 

    object** table; 
public: 
    //Constructor 
    HashTable(int size); 

    /// ...and other methods... 

Для моей реализации конструктора я получаю сообщение об ошибке: Тема 1: EXC_BAD_ACCESS (код = 1, адрес = 0x0)

Значит, я знаю, что я делаю что-то неправильно.

Это моя реализация конструктора.

//Constructor 
HashTable :: HashTable(int size){ 
    this->arraySize = size; 
    this->table = new object[size]; //<-- this is giving me issues!! 

    for (int i = 0; i < arraySize; i++) { 
     table[i] = new object; 
     table[i]->data = ""; 
     table[i]->nextptr = NULL; 
    } 

} 

Если кто-то может помочь мне здесь, что было бы очень полезно ... новинкой в ​​этом.

EDIT: Задача требует использования массивов, а не векторов.

Мне кажется, мне нужно использовать массив указателей, так как каждый индекс в массиве будет содержать связанный список объектов, которые «столкнулись» с одним и тем же индексом.

+1

Не используйте новый. Используйте хэш-таблицу HashTable (N); 'и векторы. Вполне допустимо, действительно, использовать новые структуры данных с точки зрения более простых, эффективных и отладочных, если это возможно. –

+1

Вы слишком много используете уровень косвенности. Вы можете просто сделать свою таблицу «объектом *» (т. Е. Массивом объектов) и обойтись без выделения каждого объекта. Еще лучше, вы могли бы использовать 'std :: vector' объектов, чтобы избежать всех неприятных ловушек необработанных массивов. –

+0

Да, я бы использовал векторы, если бы мог, но задания требовали использования массивов. Я отредактирую его и уточню. Итак, хэш HashTable (N); 'вместо hashTable * hash = new HashTable (N);' в моей главной? @NeilKirk – GusGus

ответ

0

Обнаруженные ответ на свой вопрос .... Для тех, кто еще интересно, ответ на мой собственный вопрос:

this->table = new object *[size]; 

эта линия будет динамически создать массив указателей на «объект» объекты.

В заголовочный файл decleration является:

object** table;