我正在尝试创建模板对象的矢量向量。当我尝试调整内部向量的大小时,错误发生,我无法做出错误消息的头部或尾部。我不知道从何处获取HashTable :: Item :: Item。有什么建议吗?
/ usr / include / c ++ / 4.4.6 / bits / stl_vector.h(552):错误:没有构造函数的实例“HashTable :: Item :: Item [with Key = int,Value = Varvalue]”匹配参数列表 resize(size_type __new_size,value_type __x = value_type())
detected during: instantiation of "void std::vector<_Tp, _Alloc>::resize(std::vector<_Tp, _Alloc>::size_type={size_t={unsigned long}}, std::vector<_Tp, _Alloc>::value_type) [with _Tp=HashTable<int, Varvalue>::Item, _Alloc=std::allocator<HashTable<int, Varvalue>::Item>]" at line 118 of "main.cc"
以下是相关代码:
#define VECLEN 16 class Varvalue { public: char data[32]; };template class HashTable { private: class Item { public: bool valid; Key key; Value value; Item *next;
Item(const Key k, const Value v, Item *b = 0, bool val = true): key(k), value(v), next(b), valid(val) {} };vector<vector<Item> > table; int tableSize; HashTable(const int s): tableSize(s) { table.resize(tableSize); for(int i=0; i<table.size(); i++) table[i].resize(VECLEN); // <<-- error line 118 }
}
int main() { HashTable<int, Varvalue> htable(nkeys); }
答案 0 :(得分:6)
Item
没有默认构造函数,因此您需要向resize
和vector<Item>
提供2个参数。后一个参数应该是用于填充向量的“默认”Item
。
答案 1 :(得分:2)
在C ++中,当您声明一个类而没有提供构造函数时,会自动生成一个默认构造函数(没有任何输入参数)。当您使用输入参数声明构造函数时,您不会获得默认构造函数。在你的情况下,你确实为类item
声明了一个构造函数,它需要k和v作为输入参数,但你没有给它们,所以要么声明一个没有item
输入参数的构造函数,要么提供k和诉