Каков правильный синтаксис для инициализации массива хеш-таблиц в C ++? - PullRequest
0 голосов
/ 29 февраля 2012

Как мне реализовать Array of Hashtables в 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]’

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

Ответы [ 2 ]

1 голос
/ 29 февраля 2012

Вы пробовали

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) };
1 голос
/ 29 февраля 2012

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

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

...