在C++中初始化哈希表数组的正确语法是什么?

问题描述:

我将如何在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://*.com/questions/2570235/initialize-a-static-member-an-array-in-c) – 2012-02-29 03:07:46

+0

最简单的解决方案是避免这个问题:不要使用数组,而是使用向量。 – 2012-02-29 03:18:11

你试过

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

编译器告诉你,你正在编写的代码是C++ 11。

你可以使用Boost.Assignment

+0

而他的教师正在用不支持C++ 11的编译器进行测试,那么这个“答案”如何提供帮助? – 2012-02-29 02:50:18