我在 C++ 项目的源文件中声明了一个名为 hMap 的对象:
dense_hash_map<unsigned char *, int, hash<unsigned char *> > hMap;
其中哈希图的键是“无符号字符数组”类型,值是“int”类型。我需要将此对象传递给函数 hMap_receive() 并且应该能够持有对象的所有权,即 hMap_receive() 应该能够修改对象 hMap 的内容。
问题:我应该将它作为指针传递吗?我通过了检查,但无法调用两个运算符重载方法 - 数组订阅运算符和赋值运算符(如下所示),它们是类“dense_hash_map”的公共成员。
data_type& operator[](const key_type& key) { // This is our value-add!
// If key is in the hashtable, returns find(key)->second,
// otherwise returns insert(value_type(key, T()).first->second.
// Note it does not create an empty T unless the find fails.
return rep.template find_or_insert<DefaultValue>(key).second;
}
dense_hashtable& operator= (const dense_hashtable& ht) {
if (&ht == this) return *this; // don't copy onto ourselves
if (!ht.settings.use_empty()) {
assert(ht.empty());
dense_hashtable empty_table(ht); // empty table with ht's thresholds
this->swap(empty_table);
return *this;
}
例子:
hMap_receive(dense_hash_map<int, unsigned char *, hash<int> > hMap,
unsigned char *key,int data){
.........
.........
hMap[key] = data;
cout << hMap[key];
.........
}
工作正常并将数据分配给键值并打印与键关联的数据。但,
hMap_receive(dense_hash_map<int, unsigned char *, hash<int> > *hMap,
unsigned char *key,int data){
.........
.........
hMap[key] = data;
cout << hMap[key];
.........
}
既不分配数据也不给出关键数据。而是给出错误:
error: invalid types ‘google::dense_hash_map<unsigned char*, int,
std::tr1::hash<unsigned char*>, eqstr>*[unsigned char*]’ for array subscript
如果我通过指针传递对象,为什么它不能正常工作?如果这不是正确的方法,我应该如何传递对象,以便我能够对对象执行所有操作而不会出错,并且还能够修改调用函数的原始传递对象。