2012-02-29 158 views
0

我將如何在C++中實現一個哈希表數組?在C++中初始化哈希表數組的正確語法是什麼?

我有一個構造函數看起來像這樣一個Hashtable類:

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 2012-02-29 03:07:15

+0

[在C++中初始化一個靜態成員(一個數組)](http://stackoverflow.com/questions/2570235/initialize-a-static-member-an-array-in-c) – 2012-02-29 03:07:46

+0

最簡單的解決方案是避免這個問題:不要使用數組,而是使用向量。 – 2012-02-29 03:18:11

回答

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 2012-02-29 03:05:30

+0

browser.h:33:38:錯誤:一個大括號封裝初始化不允許在這裏之前'{'令牌 在從browser.cpp包括的文件: 3:0: browser.h:33:199:錯誤:ISO C++禁止成員'回答'初始化[-fpermissive] browser.h:33:199:錯誤:使'回答'靜態[-fpermissive] 瀏覽器.h:33:199:錯誤:非整型靜態數據成員類的無效類初始化'ChainingHashTable [5]' – kabirpong 2012-02-29 03:05:46

+0

@kabirpong:哦,現在我看到這是一個成員變量。你在問題的任何地方都沒有說過,這很重要! – 2012-02-29 03:07:02

1

編譯器告訴你,你正在編寫的代碼是C++ 11。

你可以使用Boost.Assignment

+0

而他的教師正在用不支持C++ 11的編譯器進行測試,那麼這個「答案」如何提供幫助? – 2012-02-29 02:50:18

相關問題