2015-10-10 4 views
1

Я хотел бы реализовать пример хеш-таблицы. Итак, для этой цели я создал один заголовок, один файл hash.cpp и main.cpp. в моем hash.cpp, я попытался запустить фиктивную хэш-функцию, которая принимает ключевое значение и превращается в значение индекса. однако он выдает ошибку (ссылка на «хэш» неоднозначна) всякий раз, когда я пытаюсь создать объект в соответствии с этим хэш-классом.Ссылка на «класс» является неопределенной

это мой main.cpp:

#include "hash.h" 
#include <iostream> 
#include <cstdlib> 
#include <string> 
#include <stdio.h> 

using namespace std; 

int main(int argc, const char * argv[]) { 

    hash hash_object; 
    int index; 
    index=hash_object.hash("patrickkluivert"); 

    cout<<"index="<<index<<endl; 
return 0; 
} 

это мой hash.cpp:

#include "hash.h" 
#include <iostream> 
#include <cstdlib> 
#include <string> 
#include <stdio.h> 


using namespace std; 

int hash(string key){ 
    int hash=0; 
int index; 
    index=key.length(); 

    return index; 
} 

это мой hash.h

#include <stdio.h> 
#include <iostream> 
#include <cstdlib> 
#include <string> 

using namespace std; 

#ifndef __hashtable__hash__ 
#define __hashtable__hash__ 
class hash 
{ 
    public: 
    int Hash(string key); 

}; 

#endif /* defined(__hashtable__hash__) */ 
+2

Будьте осторожны с использованием пространства имен std; '. –

ответ

5

Вашего символ hash класса сталкиваясь с std::hash

Быстрого исправления может быть использование глобального пространства имен спецификатора

int main(int argc, const char * argv[]) { 

    ::hash hash_object; 

но лучше и рекомендовали можно было бы остановить загрязнение вашего глобального пространства имен

using namespace std; 

и просто используя std::cout или std::endl, когда они вам понадобятся. Вы также можете создать собственное пространство имен, если вы пишете библиотеку.

Кроме того, у вас есть заглавная буква опечаток здесь:

index = hash_object.hash("patrickkluivert"); 
        ^I suppose you're referring to the Hash() function here 

и здесь

int Hash(std::string key) { 
    ^this needs to be capital as well 
    int hash = 0; 

в случае, если вы хотите, чтобы соответствовать вашей декларации и избежать бросание/связывая ошибки.

+0

большое спасибо очень приятный четкая информация. – gobo

4

Ваш hash класс конфликтует с std::hash. Прекратите использовать using namespace std; прямо сейчас. Если вы хотите, чтобы сделать заявление печати короче, попробуйте using std::cout; using std::endl;

Смежные вопросы