2012-02-29 2 views
0

Как бы реализовать массив Hashtables в C++?Каков правильный синтаксис инициализации массива хэш-таблиц в C++?

У меня есть хеш-класс с конструктором, который выглядит следующим образом:

explicit ChainingHashTable(const HashedObj & notFound, int size = 101); 

Так что я попытался сделать массив этих хеш-таблицы, выполнив:

static ChainingHashTable<int> answers[5] = { {0, 500}, {0, 500}, {0, 500}, {0, 500}, {0, 500} }; 

однако, я получаю следующие ошибки & предупреждения:

browser.cpp:106:71: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default] 
browser.cpp:106:71: error: converting to ‘ChainingHashTable<int>’ from initializer list would use explicit constructor ‘ChainingHashTable<HashedObj>::ChainingHashTable(const HashedObj&, int) [with HashedObj = int]’ 

Я не могу использовать другой компилятор потому что это для присвоения класса, но что я делаю неправильно? Каков правильный синтаксис?

+0

Он создается в классе/объекте, так Кроме того, как бы инициализировать его в конструкторе? – kabirpong

+0

Возможный дубликат [Инициализировать статический член (массив) в C++] (http://stackoverflow.com/questions/2570235/initialize-a-static-member-an-array-in-c) –

+0

Простейшим решением является избегая проблемы: не используйте массивы, а скорее векторы. –

ответ

1

Вы пробовали

static ChainingHashTable<int> answers[5] = { ChainingHashTable<int>(0, 500), ChainingHashTable<int>(0, 500), ChainingHashTable<int>(0, 500), ChainingHashTable<int>(0, 500), ChainingHashTable<int>(0, 500) }; 

?


Выше приведен метод глобальной переменной. Для статического члена класса, объявление и определение должно быть отделенны:

class SomeClass 
{ 
    static ChainingHashTable<int> answers[5]; 
}; 

и в одном модуле компиляции (так не внутри заголовка)

ChainingHashTable<int> SomeClass::answers[5] = { ChainingHashTable<int>(0, 500), ChainingHashTable<int>(0, 500), ChainingHashTable<int>(0, 500), ChainingHashTable<int>(0, 500), ChainingHashTable<int>(0, 500) }; 
+0

Я попробовал вставить это только сейчас, но я получаю совершенно новую ошибку: – kabirpong

+0

browser.h: 33: 38: error: здесь не разрешен инициализатор с прикрепленным скобками до '{' token В файле, включенном в browser.cpp: 3: 0: browser.h: 33: 199: error: ISO C++ запрещает инициализацию ответов членов [-fpermissive] browser.h: 33: 199: ошибка: создание «ответов» статических [-fpermissive] browser .h: 33: 199: error: недопустимая инициализация класса статических данных нечетного типа «ChainingHashTable [5] ' – kabirpong

+0

@kabirpong: О, теперь я вижу, что это переменная-член. Вы не сказали этого нигде в вопросе, и это очень важно! –

1

Компилятор сообщает вам, что код, который вы пытаетесь написать, - это C++ 11.

Вы можете использовать Boost.Assignment

+0

И его инструктор собирается протестировать с помощью компилятора, который не поддерживает C++ 11, так как это поможет «ответ»? –

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