0

这是我的模板类及其构造函数的代码。我无法初始化其元素是复杂模板类型的向量。

template <class Key, class Obj>
class HashTable{
    typedef int T;  
    typedef pair<const Key, Obj> Entry;
    typedef list<Entry> Bucket;
    typedef vector<Bucket> BktArray;
private:
    T n, nbuckets;
    BktArray a;
public:
    HashTable(T capacity = 199){
        n = 0;
        nbuckets = capacity;
        Bucket b();
        a = vector<Bucket>(capacity, b);
    }
};

我在该行中收到“没有匹配的呼叫功能”:

a = vector<Bucket>(capacity, b);

我想初始化向量以包含“容量”元素。

4

1 回答 1

3

Bucket b();声明一个被调用的函数b,它返回一个Bucket实例。不是你想要的(因此类型不匹配)。b也是不必要的,vector没有它的构造函数会做正确的事情(=它默认构造它的元素)。

更一般地说,您绝对应该在这里使用初始化列表。因此,重写您的代码如下:

HashTable(T capacity = 199)
    : n(), nbuckets(capacity), a(vector<Bucket>(capacity))
{ }

此外,将其T作为类型别名int非常具有误导性,我不推荐它。此上下文中的标准类型名称是size_type,但它应该是无符号类型,而不是 ( signed) int

于 2013-07-14T19:24:36.263 回答