我正在尝试创建自己的哈希类。然而,经过无数次尝试,我无法使我的程序正常工作。我相信我在调用函数时出错,但我不太确定。任何人都可以帮我弄清楚我做错了什么,并可能告诉我如何解决它?
hash.h
#include <iostream>
class MyHash {
public:
MyHash();
int hashCode(char, char);
};
hash.cpp
#include <iostream>
#include "Hash.h"
MyHash::MyHash() {}
int MyHash::hashCode(char first_letter, char last_letter) {
int hash = 0;
int ascii = 1;
hash = ((ascii * first_letter) + (ascii * last_letter)) % 23;
return (hash);
}
driver.cpp
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include "Hash.h"
using namespace std;
int main() {
vector<string> words;
int first_letter;
int last_letter;
string word;
int n = 0;
int hash = 0;
for (int i = 0; i < 5; i++) {
cout << " Please enter a word: ";
cin >> word;
words.push_back(word);
}
vector<string>::iterator itr = words.begin();
for (; itr != words.end(); itr++) {
first_letter = *itr[n].begin();
last_letter = *itr[n].rbegin();
cout << endl << " " << first_letter << " " << last_letter << endl;
hash = hashCode(first_letter, last_letter) cout << hash << endl;
}
return 0;
}
答案 0 :(得分:1)
为什么要将一个函数包装在一个类中?定义一个类是完全随意的,不在其中放置任何数据然后尝试从中调用该函数而不声明任何对象。
int hashCode(char first_letter, char last_letter) {
int hash = 0;
int ascii = 1;
hash = ((ascii * first_letter) + (ascii * last_letter)) % 23;
return (hash);
}
如果你想使用一个类,你需要有一个结构:
class myHash{
public:
myHash();
insert();
remove();
private:
std::vector<std::string> words;
hash();
rehash();
};
答案 1 :(得分:1)
因此,为了克服编译问题并且不改变程序的整体结构,您需要将对hashDode(...)
的调用更改为MyHash::hashCode(...)
,并更改int hashCode(char, char);
的声明成为static int hashCode(char, char);
。
你不能只调用在某个范围内定义的函数并期望编译器弄清楚它,你需要给出一些关于函数所在位置的指示。由于它是一个类方法,您需要指定一个类对象或类本身。
static
关键字允许您在没有对象的情况下调用该函数,在这种情况下可以正常,因为您的对象中没有任何数据。