2017-03-20 3 views
-1

Lorsque je tente d'appeler la fonction de hachage créer des lignes de code ci-dessous je reçois l'erreur aucune fonction correspondante pour les appelsAucune fonction correspondante sur Hashtable

myHash.create("5", "Data"); 
checkTest("testSimpleIntHash #1", "Data", myHash.retrieve("5")); 

L'idée est que créer reçoit la clé de la KeyValuePair class, puis la méthode aurait haché la clé, aller à ce seau, puis insérer la paire de valeur de clé. Je crois que je reçois cette erreur parce que je ne produis pas de chaîne. Cependant, je ne peux pas comprendre la syntaxe pour sortir correctement la paire de valeurs de clé en chaîne avec la méthode create. (Je me sers std::list, et ma KeyValuePair classe fonctionne correctement)

template<typename T> class HashTable 
{ 
public: 

    static const unsigned int NUM_BUCKETS = 100000; 

    HashTable create(const string& key, const T& item) 
    { 
     int temp = hash(key); 
     arr[NUM_BUCKETS].push_back(KeyValuePair<T>(temp, item)); 
    } 
private: 
    int hash(const string& key) const; 
    //Make an array of linked lists of KeyValuePair objects. 
    list<KeyValuePair<T>> arr[NUM_BUCKETS]; 
}; 

template <typename T> 
int HashTable<T>::hash(const string& key) const { 
    int temp = 0; 
    for (int i = key.length(); i >= 0; i--) { 
     temp = (13 * temp + key[i]) % NUM_BUCKETS; 
    } 
    return temp; 
} 
+0

Dans 'create' vous ne retournez pas une valeur, et la déclaration de classe est incoplete (de nom de classe) – Rama

+0

Quelle est la définition de myHash? – JohnB

+0

Quelle est la définition de 'checkTest'? – Rama

Répondre

0

Dans la méthode create vous pouvez renvoyer une référence à la classe elle-même.

HashTable& create(const string& key, const T& item) 
{ 
    int temp = hash(key); 
    arr[NUM_BUCKETS].push_back(KeyValuePair<T>(temp, item)); 
    return *this; 
} 

Mais de toute façon, vous ne l'utilisez pas.

Et vous devez déclarer la méthode retrieve dans votre classe HashTable: Par exemple:

string retrieve(const string& input) 
{ 
    string result; 
    //Not sure wath do you pretend to be this method. 
    //But it will transform your input in your result 
    return result; 
}