我有以下哈希表插入函数;
template<class T>
void Hash<T>::Insert(int key, const T& value) {
int index = key % tableSize;
HashNode<T> node(key, value);
array[index]->insert(key,node);
numOfElements++;
// Check if need to rehash and do it
Rehash();
}
我想在这段代码中使用它:
StatusType Department::AddMagi(int MagiID,int MagiLevel){
if(MagiID <=0 || MagiLevel <=0) return INVALID_INPUT;
Magi magiToInsert(MagiID,magiCount,MagiLevel);
try{
hash.Insert(MagiID,magiToInsert);
magiRank.insert(magiCount,magiToInsert);
}catch(Tree<int,HashNode<Magi> >::ElementAlreadyExists& e){
return FAILURE;
}catch(RankTree<int,Magi>::ElementAlreadyExists& e){
return FAILURE;
}
return SUCCESS;
}
编辑:这是班级部门:
class Department {
int magiCount;
Hash<Magi> hash;
RankTree<int,Magi> magiRank;
UnionFind creatureAreas;
public:
Department(int n, int* Levels);
StatusType AddMagi(int MagiID, int MagiLevel);
StatusType RemoveMagizoologist(int MagiID);
StatusType RemoveBarrier(int Creature1, int Creature2);
StatusType AssignMagizoologistToCreature(int CreatureID);
StatusType ReleaseMagizoologist(int MagiID);
StatusType GetCreatureOfMagi(int MagiID, int* CreatureID) const;
StatusType AreCreaturesInSameArea(int Creature1, int Creature2,
bool* SameArea) const;
StatusType GetSizeOfArea(int CreatureID, int* SizeOfArea) const;
};
编辑:一个完全正常的简单测试用例。
class Magi{
int id;
public:
Magi(int id):id(id){}
~Magi(){}
int getId() const{
return this->id;
}
bool operator==(const Magi& magi){
return this->id == magi.id;
}
};
bool InsertTest(){
bool returnValue = true;
Magi m1(1);
Hash<Magi> hash;
hash.Insert(m1.getId(),m1);
returnValue = (hash.Find(1) == m1);
try{
hash.Insert(m1.getId(),m1);
}catch(Tree<int,HashNode<Magi> >::ElementAlreadyExists& e){
returnValue = true;
}
Magi m2(12);
hash.Insert(m2.getId(),m2);
returnValue = (hash.Find(12) == m2);
return returnValue;
}
在hash.insert(...)我收到此错误:“无效的参数” 候选人是: void Insert(int,const Magi&amp;) “” 我已经在像这样的类上多次测试了哈希表,从来没有得到过这个错误,我错过了什么?