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

What is the proper syntax for initializing an array of hashtables in C++?

本文关键字:语法 是什么 数组 C++ 初始化 哈希表      更新时间:2023-10-16

如何在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]’

我不能使用不同的编译器,因为这是用于类赋值的,但我做错了什么?正确的语法是什么?

你试过吗

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) };

编译器告诉您要编写的代码是C++11。

您可以使用Boost.Assignment